//ricevimento 2023 07 05 (luglio) foo(a,b,c): <if (random(0,1)) {a=b; b=c} else {c=b; b=a}> x = 0 foo (x,y,x) setto x al valore precedente di y y=x? abbiamo fatto un assegnamento atomico in un mondo in cui non lo è x=y=1 foo(x,g,y) se g = 1 x e y = 1 se g = 0 allora uno delle due (x o y) = 0 l'altro rimane 1 e g diventa 1 x=y=0 foo(x,g,y) allora g=0 mutexin: while True: x=y=1; foo(x,g,y) if (x == 0 || y == 0) break; mutexout x=y=0 foo(x,g,y) ------------------- bar(a,b): <x=a & 1; a = (a >> 1) | b << 31; b = x> bar(a,b) è un registro di scorrimento infatti hmmmmmmmmmmmmmml restituisce l bhmmmmmmmmmmmmmm 0 sarebbe via libera, != 0 sarebbe continua a ciclare a come globale b come locale v=0 bar (g, v) v=1 for i in range(31): bar(g, v) mutexin: do v=1 bar(g,v) while v != 0 mutexout: v=0 bar(g,v) 11111110 entra 11111111 v=0 entra 11111111 v=1 esce 01111111 v=1 quello che voleva entrare 10111111 v =1 11011111 v=1 continua a ciclare finchè non fa v=0