Guest User

Untitled

a guest
Jul 18th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. l'esecizio di test&set nel compito di 07.09.2007
  2. f1(x,y)=< x1 = x/64 + y%64 ; y = y/64 + x%64 ; x = x1 >
  3.  
  4.  
  5.  
  6. Provo come prima cosa ad utilizzare unicamente i valori compresi tra 0 e 1 per i valori della x e della y, ottenendo la seguente tabella:
  7.  
  8. ---------------
  9. | x y | x' y'|
  10. |-------------|
  11. | 0 0 | 0 0 |
  12. | 0 1 | 1 0 |
  13. | 1 0 | 0 1 |
  14. | 1 1 | 1 1 |
  15. |-------------|
  16.  
  17. Come si può vedere, questo è uno swap atomico, e quindi implementabile come T&S. Posso quindi ad esempio scrivere:
  18.  
  19. init: global g = 0;
  20.  
  21. entry: int l; do { l=1; f1(l,g); } while(l==1);
  22. exit: g = 0;
  23.  
  24. in quanto allo scambio quando il processo entra nella CS la variabile globale verrà settata ad 1, e così rimarrà per tutti i seguenti processi rimanenti che vogliono accedere alla CS, che verranno sbloccati solamente quando g verrà settato a 0.
Add Comment
Please, Sign In to add comment