Guest User

Untitled

a guest
Jul 20th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. //includy
  2. ...
  3. sem_t *sem_count1 = sem_open("tho_count1", O_CREAT, 0666, N - 1);
  4. sem_t *sem_count2 = sem_open("tho_count2", O_CREAT, 0666, 0);
  5. sem_t *sem_barrier1 = sem_open("tho_barrier1", O_CREAT, 0666, 0);
  6. sem_t *sem_barrier1 = sem_open("tho_barrier2", O_CREAT, 0666, 0);
  7. // ak ti nepôjde spraviť to sem_open mimo main()
  8. // tak daj pred "=" bodkočiarku a ostatné presuň do main-u
  9. ...
  10. int pocet;
  11.  
  12. void run_child();
  13.  
  14. int main(...) {
  15.     int i;
  16.     int pid;
  17.     int status;
  18.    
  19.     //tu príde ošetrenie argumentov, nastaví sa pocet
  20.        
  21.     for (i = 0; i < pocet; i++){
  22.         pid = fork();
  23.         if (pid > 0) {
  24.             //asi bude treba do poľa uschovať PID detí
  25.         } else if (pid == 0) {
  26.             run_child();
  27.         } else {//fork error}
  28.     }
  29.  
  30.     wait(&status);
  31.     //tu treba ošetriť, keď parrent prestane čakať na wait
  32.     // - jedno z detí skončilo
  33.     // - dostal signál
  34.     // - neaké podobné debiliny
  35.    
  36.     //Po ukončení detí treba odstrániť všetky použité semafóry
  37.    
  38.     return EXIT_SUCCESS;
  39. }
  40.  
  41. void run_child() {
  42.     while(1){
  43.  
  44.         printf("Herp derp pred bariérou...");
  45.         sem_post(sem_count2);
  46.         if(sem_trywait(sem_count1) == -1
  47.         && errno == EAGAIN) {
  48.             //asi treba aj resetnúť errno, neviem teraz funkciu na to
  49.             sem_wait(sem_count2); //aby číslo na sem_count2 bolo (N - 1)
  50.             sem_post(sem_barrier1);
  51.         }
  52.         //pred prvou barierou
  53.         sem_wait(sem_barrier1);
  54.         sem_post(sem_barrier1);
  55.        
  56.         printf("Harp darp za bariérou...");
  57.         //za prvou barierou
  58.         sem_post(sem_count1);
  59.         if(sem_trywait(sem_count2) == -1
  60.         && errno == EAGAIN) {
  61.             //asi treba aj resetnúť errno, neviem teraz funkciu na to
  62.             sem_wait(sem_count1); //aby číslo na sem_count1 bolo (N - 1)
  63.             sem_post(sem_barrier2);
  64.         }
  65.         //pred druhou barierou
  66.         sem_wait(sem_barrier2);
  67.         sem_post(sem_barrier2);
  68.     }  
  69. }
Add Comment
Please, Sign In to add comment