/* La un InternetCafe exista 8 calculatoare si vin 20 de clienti. Initial * se stabileste ( arbitrar ) de cati bani dispune fiecare client. In functie * de cati bani are, respectiv cate ore poate inchiria un calculator, clientii * vor fi repartizati la cate un calculator. Dar un client nu poate inchiria * mai mult de 1 ora odata chiar daca dispune de suficienti bani, deci dupa o * ora este scos de la calculator si trece la coada ( daca mai are bani ). Cand * nu mai sunt clienti cu bani, proprietarul isi face bilantul ( afiseaza cati * bani a castigat ). * Obs: Evident fiecare client e 'simulat' de catre un thread. */ #include #include #include #define nrCalc 8 #define nrCl 20 pthread_mutex_t semm[nrCalc]; pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexc=PTHREAD_MUTEX_INITIALIZER; pthread_cond_t condElm=PTHREAD_COND_INITIALIZER; int poz[nrCl]; pthread_t tid[nrCl]; int money[nrCl]; int semmutex_lock() { int i; while (1) { for (i=0;i=60) { printf("Client %d -> IN\n",ind); money[ind] -= 60; sleep(60); } else { printf("Client %d -> IN\n",ind); sleep(money[ind]); money[ind]=0; } if (money[ind]==0) { printf("Client %d <- OUT (no money left)\n",ind); } else { printf("Client %d <- OUT (money left: %d)\n",ind,money[ind]); } // poz[ind]=1; // afisare(); // sl=1+(int) (3.0*rand()/(RAND_MAX+1.0)); // sleep(sl); // poz[ind]=2; semmutex_unlock(indm); } while ( money[ind]>0 ); } //main int main() { char* sind; int i; for (i=0;i