Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 24th, 2012  |  syntax: None  |  size: 1.05 KB  |  hits: 22  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. CONCORRENZA
  2. 12 GENNAIO 2012
  3.  
  4. Il monitor seq da implementare deve fornire due procedure entry:
  5. procedure entry void enter(void);
  6. procedure entry void exit(void);
  7. I processi chiamano i servizi di seq come segue:
  8. ....
  9. seq.enter();
  10. /* codice controllato da seq */
  11. seq.exit();
  12. ....
  13. Tutti i processi che ne facciano richiesta possono entrare nel codice controllato da seq contemporanamente (questa NON è una sezione critica!). Exit deve garantire che i processi escano dal codice controllato in ordine inverso rispetto alla sequenza di ingresso. Per esempio se tre processi a, b e c chiamano seq.enter in questo ordine b non potrà completare la exit se prima c non ha chiamato la exit. A dovrà attendere il completamento della exit sia di b sia di c per poter uscire.
  14.  
  15. mia soluzione:
  16. monitor seq {
  17.         condition okExit;
  18.         int counter;
  19.         int x;
  20.         int y;
  21.  
  22.         procedure entry void enter() {
  23.                 counter++;
  24.         }
  25.  
  26.         procedure entry void exit() {
  27.                 x = counter;           
  28.                 y = x--;               
  29.                
  30.                 if (x > y) {            /* se C > B */
  31.                         okExit.signal();
  32.                 }
  33.                 okExit.wait();
  34.         }
  35. }