Zdravim mam dotaz jak skutecne pracuje tzv. lockovani useku kodu a to az na uroven CPU Cache.
CPU cache je fronta instrukci typu LIFO, to vime, a pri kazdem volani podrizene metody se ta nadrizena metoda cachuje do te LIFO fronty. A ja se ptam co se deje na urovni IL / CLR.
Priklad za vsechny, mame multithreadovy kod kdy kazde z vlaken vola stejnou metodu se stejnym typem formalniho parametru jen pokazde s jinou instanci toho parametru.
void MojeMetoda(MujTyp inst){ // tato instnce je odlisna dle volajiciho threadu
lock(nejakyObject){ // jak toto funguje
var vysledek=inst.Operand1 + inst.Operand2;
// nasleduje treba nejak Invokace prave s parametrem vysledek
neco.Invoke(new Action(() => neco.MetodaProVyhodnoceni(vysledek));
}
}
A ja se ptam (tedy jestli to chapu dobre) jak je zajisteno ze Moje metoda je zavolana multithreadove mockrat za sebou,a vzdy korektne dokonci, o zadna data neprijdem a ani nedojde ke zmene poradi tohovolani.
Je tedy na urovni CLR a hloubeji jeste nejaka dalsi CACHE nejspise typu FIFO do ktere jsou ukladany vsechny potrebne instrukce vyplyvajici call MojeMetoda a diky tomu LOCKu dochazi k postupne vyprazdnovani te FIFO cache tim ze se to jedno volani predava CPU cache ktery za pomoci CPU vykona tu vyznamnou praci pri vypoctu vysledku.
Nevim jestli tomu rozumim a proto to nedokazu ani poradne popsat.
Tak bych chtel poprosit nekoho kdo toto klicove slovo zna ponekud hloubeji nez tak jak to staci z titulu jeho pouziti.
Diky vsem VlK