Guest User

Untitled

a guest
May 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. i. f(a,b,c)=< binrandom()==0 ? (a=b, b=c) : (c=b,b=a) > /*binrandom genera un numero binario random */
  2.  
  3. Puo essere usata come t& s
  4.  
  5. int g=0 //0=libera, 1=occupata
  6.  
  7. void entercs(void){
  8. int l;
  9. do{
  10. l=1;
  11. f(l,g,l); //qualsiasi cosa prenda si comporta come swap
  12. }while(l !=0)
  13. }
  14.  
  15. void exitcs(void){
  16. f(0,g,0); //viene settato in ogni caso
  17. }
  18.  
  19. foo(void **x, void **y) {
  20. *x = *y;
  21. *y = x;
  22. }
  23. e' possibile usare foo al posto della test&set? (Se si': spiegare bene come funziona il codice presentato come soluzione,
  24. se no: spiegare bene i motivi dell'impossibilita' ).
  25.  
  26. soluzione:
  27. x=1 *x=2 ***x=3
  28. y=4 *y=5 ***y=6
  29.  
  30. *x= 5
  31. *y= 1
  32. *(*x)=6
  33. *(*y)=5
  34. Si può usare come t&s basta che io vada a cambiare sempre il valore di *y siccome io trovo sempre che *x=x e se vado a cambiare il valore di *y di conseguenza con l'assegnamento *y=x mi viene sempre data la condizione *x!=x che è quella che io cercavo.
  35. global=0x11 // indirizzo di memoria (valore non nullo)
  36. int *local=null
  37.  
  38. while(true){
  39. do{
  40. foo(local,global); -> local= 0x11 global=null
  41.  
  42. }while(local!=null); -> va in loop perchè rispetta la condizione
  43. critical section
  44. global=0x11;
  45. non critical section
  46. }
  47.  
  48.  
  49. foo(x,y) = <x1=x+1, y1=y+1, x=y1, y=x1> (con x, y interi)
  50. E' possibile usarla come test & set siccome il valore di x è sempre il valore assunto in precedenza da y1 e viceversa per y
  51.  
  52. soluzione:
  53.  
  54. int global=1;
  55.  
  56.  
  57. while(true){
  58. do{
  59. int local=1;
  60. foo(local,global);
  61. }while(local != global);
  62. critical section
  63. ...
  64. global=1;
  65. non critical section
  66. }
Add Comment
Please, Sign In to add comment