//Bonusova uloha: implementacia synchronizacie pre N "zretazenych" procesov (nie cez n-1 semaforov)
#define N 10 //pozadovane cele cislo - napr. 10
//ukazkova struktura semaforu + samozrejme funkcie wait() a signal()
typedef struct semaphore {
int val;
queue Q;
} semaphore;
//Globalne premenne
int n = N, pocitadlo = 0;
semaphore mutex, sem1;
//funkcia initialize, ktora nastavi semafory na zaciatku - moze to byt napriklad aj main
void initialize(){
mutex.init(1);
sem1.init(0);
}
//postup instrukcii, ktore vykonava proces
void doProcess(){
mutex.wait();
pocitadlo = pocitadlo + 1; //inkrementacia pocitadla "chranena" vzajomnym vylucovanim
if(count == n) sem1.signal(); //posledny proces da po zvyseni pocitadla signal pre zaciatok "radu"
mutex.signal();
//cakanie na svoj turn
sem1.wait();
doStuff(); //vykonanie tela procesu
sem1.signal(); //po skonceni dame sigal nasledujucemu procesu
}