C Program pre implementáciám N Sync " zreťazenie " procesov ( nie cez n - 1 semafor )

Ako napísať C program na implementáciám N Sync " zreťazenie " procesov ( nie cez n - 1 semafore ) v C programovací jazyk ?



  1. //Bonusova uloha: implementacia synchronizacie pre N "zretazenych" procesov (nie cez n-1 semaforov)
  2. #define N 10 //pozadovane cele cislo - napr. 10
  3.  
  4. //ukazkova struktura semaforu + samozrejme funkcie wait() a signal()
  5. typedef struct semaphore {
  6.         int val;
  7.         queue Q;
  8. } semaphore;
  9.  
  10. //Globalne premenne
  11. int n = N, pocitadlo = 0;
  12. semaphore mutex, sem1;
  13.  
  14. //funkcia initialize, ktora nastavi semafory na zaciatku - moze to byt napriklad aj main
  15. void initialize(){
  16.         mutex.init(1);
  17.         sem1.init(0);
  18. }
  19.  
  20. //postup instrukcii, ktore vykonava proces
  21. void doProcess(){
  22.         mutex.wait();
  23.         pocitadlo = pocitadlo + 1;  //inkrementacia pocitadla "chranena" vzajomnym vylucovanim
  24.         if(count == n) sem1.signal(); //posledny proces da po zvyseni pocitadla signal pre zaciatok "radu"
  25.         mutex.signal();
  26.        
  27.         //cakanie na svoj turn
  28.         sem1.wait();
  29.         doStuff();  //vykonanie tela procesu
  30.         sem1.signal();  //po skonceni dame sigal nasledujucemu procesu
  31. }


Learn More :