Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Smarty 2.48 KB | None | 0 0
  1. ## Ejercicio 3
  2. *Dado un numero N verifique cuantas veces aparece ese número en un arreglo de longitud M. Realice el algoritmo en forma concurrente utilizando <> y <await B; S>. Escriba las condiciones que considere necesarias.*
  3.  
  4. ```
  5. int a[M]; int x; int count = 0; int s=M;
  6. # 1 proceso para cada valor del arreglo, osea M procesos. No vale la pena, ya que son acciones atomicas entonces 1 solo modifica x al mismo tiempo no?
  7. process A [ i=1 to M ] {
  8.         <x = a[i];s-->
  9. }
  10. process B {
  11.         while(s>0){
  12.                 <await(x==N); count=count+1;
  13.         }
  14. }
  15. deadlock en caso de que ninguno de los procesos asigne un N a x ??
  16. ```
  17.  
  18. ```
  19. # MAL?, se suma una sola vez no?
  20. int a[M]; int count=0; int x;
  21. co
  22. for [i=1 to M] {
  23.         if(x==N) <count++>
  24. }
  25. oc
  26. ```
  27.  
  28. ```
  29. # Similar al primero, pero con 1 proceso solo para toda la iteracion
  30. int a[M]; int count = 0; int x; int s=M;
  31. process A {
  32.         for [i=1 to M]{
  33.                 <x=a[i];s--;>
  34.         }
  35.  
  36. }
  37. process B {
  38.         while(s>0){
  39.                 <await(x==N) count=count+1;>
  40.         }
  41. }
  42. ```
  43.  
  44. ```
  45. segun la diapositiva puedo hacer algo asi:
  46. int a[M]; int count = 0;
  47. bool lock=false;
  48. process A[i=1..M]{
  49.         if(a[i]==N)
  50.                 <await(not lock) lock=true;>
  51.                  count++; # Aca yo creo que no hace falta hacerla atomica a la suma de count no?
  52.                 lock=false;
  53. }
  54.  
  55. ```
  56.  
  57. ```
  58. process A[i=1..M]{
  59.         if(a[i]==N)
  60.                 <count++>;
  61. }
  62. ```
  63.  
  64. ## Ejercicio 4
  65. *Resuelva el problema de acceso a sección crítica usando un proceso coordinador. En este caso, cuando un proceso SC[i] quiere entrar a su sección crítica le avisa al coordinador, y espera a que éste le dé permiso. Al terminar de ejecutar su sección crítica, el proceso SC[i] le avisa al coordinador. Desarrolle una solución de grano fino usando sólo variables compartidas.*
  66.  
  67. ```
  68. # todos falsos todooooos
  69. bool requests[1..n];
  70. bool permissions[1..n];
  71.  
  72.  
  73. process worker[i=1..n]{
  74.         while(true){
  75.                 requests[i] = true;
  76.                 while(!permissions[i]){
  77.                         skip
  78.                 }
  79.                 SC[i]
  80.                 permissions[i]=false;
  81.         }
  82.  
  83. }
  84.  
  85. process coordinator {
  86.         while(true){
  87.                 for(i=1..n){
  88.                         if(!requests[i]) skip;
  89.                         permissions[i]=true
  90.                         while(permissions[i]){}
  91.                         requests[i]=false;
  92.                 }
  93.         }
  94. }
  95. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement