Guest User

Untitled

a guest
Feb 18th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <sys/types.h>
  4. #include <sys/ipc.h>
  5. #include <stdlib.h>
  6. #include <sys/shm.h>
  7. #include <sys/sem.h>
  8. #include <sys/msg.h>
  9. #include <values.h>
  10. #include <pthread.h>
  11.  
  12. #define N 10
  13.  
  14. int zadnjiBroj=0, broj[2000], ulaz[2000], brojDretvi;
  15.  
  16. void ulaz_u_kriticni_odsjecak(int i){
  17. int j;
  18. ulaz[i]=1;
  19. broj[i] = zadnjiBroj + 1;
  20. zadnjiBroj = broj[i];
  21. ulaz[i]=0;
  22.  
  23. for(j = 0; j < brojDretvi; j++){
  24. 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
  25. ;
  26. }
  27. while((broj[j] != 0) && ( broj[j] < broj[i] || broj[j] == broj[i] && j < i )){
  28. //dretva Di zastaje dok dretva Dj koja ima brojJ manji od brajaI ne izade iz kriticnog odsjecka i zapise brojJ=0
  29. ;
  30. }
  31. }
  32. }
  33.  
  34. void izlaz_iz_kriticnog_odsjecka(int i){
  35. broj[i]=0;
  36. }
  37.  
  38. void *dretva(void *rbr){
  39. int k, m, a;
  40. a = *((int*)rbr);
  41.  
  42. for(k = 1; k <= 5; k++){
  43. ulaz_u_kriticni_odsjecak(a);
  44. for(m = 1; m <= 5; m++){
  45. printf("Dretva: %d, K.O. br: %d (%d/5)\n",(a+1),k,m);
  46. usleep( 100000 );
  47. }
  48. }
  49. izlaz_iz_kriticnog_odsjecka(a);
  50. }
  51.  
  52.  
  53. int main(){
  54. int i;
  55. printf( "Broj dretvi: " );
  56. scanf("%d", &brojDretvi);
  57.  
  58. sigset(SIGINT, SIG_DFL);
  59.  
  60. pthread_t thr_id[N];
  61. int broj_dretve[N];
  62.  
  63. for(i = 0; i < brojDretvi; i++){
  64. broj_dretve[ i ] = i;
  65. if(pthread_create(&thr_id[i], NULL, dretva, &broj_dretve[ i ]) != 0){
  66. printf("Greska pri stvaranju dretve ! \n");
  67. exit(1);
  68. }
  69. }
  70.  
  71. for(i = 0; i < brojDretvi; i++)
  72. pthread_join(thr_id[i], NULL);
  73.  
  74. return 0;
  75. }
Add Comment
Please, Sign In to add comment