Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/ipc.h>
  4. #include <sys/shm.h>
  5. #include <sys/sem.h>
  6. #include <sys/msg.h>
  7. #include <stdlib.h>
  8. #include <values.h>
  9. #include <semaphore.h>
  10.  
  11.  
  12. static int br_Mjesta = 3;
  13. static int br_Putnika;
  14. //sem_t vrtuljak, sjeo, kraj, izasao; //s auditornih vjezbi prof. goluba dostupnih na FER2 materijalima, valjda nece plagijat
  15. //vrtuljak 0, sjeo 1, kraj 2, izasao 3
  16.  
  17. //void clean(){
  18. //
  19. //  sem_destroy(&vrtuljak);
  20. //  sem_destroy(&sjeo);
  21. //  sem_destroy(&kraj);
  22. //  sem_destroy(&izasao);
  23. //
  24. //}
  25.  
  26. int SemId;   /* identifikacijski broj skupa semafora */
  27.  
  28. void SemGet(int n)
  29.  
  30. {  /* dobavi skup semafora sa ukupno n semafora */
  31.  
  32.    SemId = semget(IPC_PRIVATE, n, 0600);
  33.  
  34.    if (SemId == -1) {
  35.  
  36.       printf("Nema semafora!\n");
  37.  
  38.       exit(1);
  39.  
  40.    }
  41.  
  42. }
  43.  
  44. int SemSetVal(int SemNum, int SemVal){  /* postavi vrijednost semafora SemNum na SemVal */
  45.  
  46.    return semctl(SemId, SemNum, SETVAL, SemVal);
  47.  
  48. }
  49.  
  50. int SemOp(int SemNum, int SemOp){  /* obavi operaciju SemOp sa semaforom SemNum */
  51.  
  52.    struct sembuf SemBuf;
  53.  
  54.    SemBuf.sem_num = SemNum;
  55.  
  56.    SemBuf.sem_op  = SemOp;
  57.  
  58.    SemBuf.sem_flg = 0;
  59.  
  60.    return semop(SemId, & SemBuf, 1);
  61.  
  62. }
  63.  
  64. void SemRemove(void)
  65.  
  66. {  /* uništi skup semafora */
  67.  
  68.    (void) semctl(SemId, 0, IPC_RMID, 0);
  69.  
  70. }
  71. //
  72. //void init() {
  73. //
  74. //  if(sem_init(&vrtuljak,1,0) != 0) {
  75. //      printf("Inicijaliziranje semfaora vrtuljak (1) nije uspjelo\n");
  76. //      exit(1);
  77. //  }if(sem_init(&sjeo,1,0) != 0) {
  78. //      printf("Inicijaliziranje semfaora sjeo (2) nije uspjelo\n");
  79. //      exit(1);
  80. //  }if(sem_init(&kraj,1,0) != 0) {
  81. //      printf("Inicijaliziranje semfaora kraj (3) nije uspjelo\n");
  82. //      exit(1);
  83. //  }
  84. //  if(sem_init(&izasao,1,0) != 0) {
  85. //      printf("Inicijalizaija semafora izasao (4) nije uspjela\n");
  86. //      exit(1);
  87. //  }
  88. //}
  89.  
  90.  
  91.  
  92. //vrtuljak 0, sjeo 1, kraj 2, izasao 3
  93. void posjetitelj() {
  94.  
  95.     SemOp(0, -1);
  96.     printf("sjedi\n");
  97.     SemOp(1, +1);
  98.     SemOp(2, -1);
  99.     printf("ustani\n"); // ili sidji
  100.     SemOp(3, +1);
  101.  
  102. }
  103.  
  104. void vrti() {
  105.     int i;
  106.     while(1) {
  107.         for (i = 1; i <= br_Mjesta; ++i){
  108.             SemOp(0, +1);
  109.             printf("Posjetitelj %d usao!\n", i);
  110.             }
  111.         for (i = 1; i <= br_Mjesta; ++i){
  112.             SemOp(1, -1);
  113.             printf("Posjetitelj %d je sjeo!\n", i);
  114.             }
  115.  
  116.         printf("pokreni vrtuljak \n");
  117.         printf("zaustavi vrtuljak \n");
  118.  
  119.         for (i = 1; i <= br_Mjesta; ++i)
  120.             SemOp(2, +1);
  121.  
  122.         for (i = 1; i <= br_Mjesta; ++i)
  123.             SemOp(3, -1);
  124.    }
  125. }
  126.  
  127. int main ( int argc, char *argv[] ){
  128.     int i;
  129.     int br_Putnika = atoi(argv[1]);
  130.  
  131. //    init();
  132.     SemGet(4);
  133.  
  134.     vrti();
  135.  
  136.     for (int i = 0; i < br_Putnika; ++i){
  137.         switch (fork()) {
  138.             case -1: printf("Greska!\n");
  139.                     exit(1);
  140.             case 0: posjetitelj();
  141.                     exit(0);
  142.         }
  143.    }
  144.  
  145.  
  146.     while (i--)
  147.         wait(NULL);
  148.  
  149. //    clean();
  150.    //for(i=0; i<N; i++) {
  151.    //    SemOp(3, +1); //semafor br. 3 povecam za 1
  152. //}
  153.     SemRemove();
  154.  
  155.  
  156.  
  157.    return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement