Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- l'esecizio di test&set nel compito di 07.09.2007
- f1(x,y)=< x1 = x/64 + y%64 ; y = y/64 + x%64 ; x = x1 >
- 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:
- ---------------
- | x y | x' y'|
- |-------------|
- | 0 0 | 0 0 |
- | 0 1 | 1 0 |
- | 1 0 | 0 1 |
- | 1 1 | 1 1 |
- |-------------|
- Come si può vedere, questo è uno swap atomico, e quindi implementabile come T&S. Posso quindi ad esempio scrivere:
- init: global g = 0;
- entry: int l; do { l=1; f1(l,g); } while(l==1);
- exit: g = 0;
- 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