Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <sys/types.h>
  5. #include <sys/ipc.h>
  6. #include <sys/sem.h>
  7. #include <unistd.h>
  8.  
  9. void semafor_v();
  10. void semafor_p();
  11. void task(int i);
  12.  
  13. int semafor;
  14. int i;
  15.  
  16. int main(int argc, char* argv[])
  17. {
  18. int lsk;
  19. semafor=(int)strtol(argv[1],NULL,10);
  20. printf("Semafor: %d\n",semafor);
  21. lsk=atoi(argv[2]);
  22. for(i=0; i<lsk; i++)
  23. {
  24. semafor_p(0);
  25. task(i);
  26. semafor_v(0);
  27. }
  28. return 0;
  29. }
  30.  
  31.  
  32. void semafor_v(int sem_num)
  33. {
  34. int zmien_sem;
  35. struct sembuf bufor_sem;
  36. bufor_sem.sem_num=sem_num;
  37. bufor_sem.sem_op=1;
  38. bufor_sem.sem_flg=SEM_UNDO;
  39. zmien_sem=semop(semafor, &bufor_sem, 1);
  40. if(zmien_sem==-1)
  41. {
  42. printf("Nie mozna otworzyc semafora\n");
  43. exit(EXIT_FAILURE);
  44. }
  45. else
  46. printf("Semafor zostal otwarty\n");
  47. }
  48.  
  49. void semafor_p(int sem_num)
  50. {
  51. int zmien_sem;
  52. struct sembuf bufor_sem;
  53. bufor_sem.sem_num=sem_num;
  54. bufor_sem.sem_op=-1;
  55. bufor_sem.sem_flg=SEM_UNDO;
  56. zmien_sem=semop(semafor, &bufor_sem, 1);
  57. if(zmien_sem==-1)
  58. {
  59. // printf("Nie mozna zamknac semafora\n");
  60. if(errno==4)
  61. {
  62. do
  63. {
  64. zmien_sem=semop(semafor, &bufor_sem, 1);
  65. }while(zmien_sem==-1);
  66. }
  67. // exit(EXIT_FAILURE);
  68. }
  69. else
  70. printf("Semafor zostal zamkniety\n");
  71. }
  72.  
  73. void task(int i)
  74. {
  75. printf("Task %d, PID: %d\n", i, getpid());
  76. fflush(stdout);
  77. sleep(1);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement