Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <signal.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <stdlib.h>
- #include <sys/shm.h>
- #include <sys/sem.h>
- #include <sys/msg.h>
- #include <values.h>
- #include <pthread.h>
- #define N 10
- int zadnjiBroj=0, broj[2000], ulaz[2000], brojDretvi;
- void ulaz_u_kriticni_odsjecak(int i){
- int j;
- ulaz[i]=1;
- broj[i] = zadnjiBroj + 1;
- zadnjiBroj = broj[i];
- ulaz[i]=0;
- for(j = 0; j < brojDretvi; j++){
- while(ulaz[j] == 1){ //dretva Di zastaje na kratko ispitavajuci ako dretva Dj upravo trazi dodjelu broja,, kako bi se izbjelgo citanje varijable dok se ona upravo mijenja
- ;
- }
- while((broj[j] != 0) && ( broj[j] < broj[i] || broj[j] == broj[i] && j < i )){
- //dretva Di zastaje dok dretva Dj koja ima brojJ manji od brajaI ne izade iz kriticnog odsjecka i zapise brojJ=0
- ;
- }
- }
- }
- void izlaz_iz_kriticnog_odsjecka(int i){
- broj[i]=0;
- }
- void *dretva(void *rbr){
- int k, m, a;
- a = *((int*)rbr);
- for(k = 1; k <= 5; k++){
- ulaz_u_kriticni_odsjecak(a);
- for(m = 1; m <= 5; m++){
- printf("Dretva: %d, K.O. br: %d (%d/5)\n",(a+1),k,m);
- usleep( 100000 );
- }
- }
- izlaz_iz_kriticnog_odsjecka(a);
- }
- int main(){
- int i;
- printf( "Broj dretvi: " );
- scanf("%d", &brojDretvi);
- sigset(SIGINT, SIG_DFL);
- pthread_t thr_id[N];
- int broj_dretve[N];
- for(i = 0; i < brojDretvi; i++){
- broj_dretve[ i ] = i;
- if(pthread_create(&thr_id[i], NULL, dretva, &broj_dretve[ i ]) != 0){
- printf("Greska pri stvaranju dretve ! \n");
- exit(1);
- }
- }
- for(i = 0; i < brojDretvi; i++)
- pthread_join(thr_id[i], NULL);
- return 0;
- }
Add Comment
Please, Sign In to add comment