Guest User

Untitled

a guest
Feb 18th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1.  
  2.  
  3. #include <stdio.h>
  4.  
  5. #include <stdlib.h>
  6.  
  7. #include <ctype.h>
  8.  
  9. #include <unistd.h>
  10.  
  11. #include <signal.h>
  12.  
  13. #include <sys/types.h>
  14.  
  15. #include <sys/ipc.h>
  16.  
  17. #include <sys/shm.h>
  18.  
  19.  
  20.  
  21.  
  22.  
  23. int Id;
  24.  
  25. typedef struct zs
  26.  
  27. {
  28.  
  29. int pravo;
  30.  
  31. int zastavica[1];
  32.  
  33. }Zs;
  34.  
  35. Zs *seg;
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. void ulazKriticniOdsjecak(int i, int j)
  44.  
  45. {
  46.  
  47. seg->zastavica[i] = 1;
  48.  
  49.  
  50.  
  51. while(seg->zastavica[j] != 0)
  52.  
  53. {
  54.  
  55. if((seg->pravo) == j)
  56.  
  57. {
  58.  
  59. seg->zastavica[i] = 0;
  60.  
  61. while((seg->pravo) == j)
  62.  
  63. {
  64.  
  65. ;
  66.  
  67. }
  68.  
  69.  
  70.  
  71. }
  72.  
  73. seg->zastavica[i] = 1;
  74.  
  75. }
  76.  
  77.  
  78.  
  79. }
  80.  
  81.  
  82.  
  83. void izlazKriticniOdsjecak(int i, int j)
  84.  
  85. {
  86.  
  87.  
  88.  
  89. seg->pravo = j;
  90.  
  91. seg->zastavica[i] = 0;
  92.  
  93. }
  94.  
  95.  
  96.  
  97. void ispisi(int i, int j, int k)
  98.  
  99. {
  100.  
  101. printf("Proces: %d, K.O. br: %d (%d/5)\n",i+1, 6 - k, j);
  102.  
  103. }
  104.  
  105.  
  106.  
  107. void proces(int i){
  108.  
  109.  
  110.  
  111. int j,k,c;
  112.  
  113. k = c = 5;
  114.  
  115.  
  116.  
  117. if(i == 0)
  118.  
  119. {
  120.  
  121.  
  122.  
  123. while(k)
  124.  
  125. {
  126.  
  127. ulazKriticniOdsjecak(i,1);
  128.  
  129.  
  130.  
  131. for(j=1; j<=5; j++)
  132.  
  133. {
  134.  
  135. ispisi(i, j, k);
  136. sleep(1);
  137.  
  138. }
  139.  
  140.  
  141.  
  142. izlazKriticniOdsjecak(i,1);
  143.  
  144. k--;
  145.  
  146. }
  147.  
  148. }
  149.  
  150.  
  151.  
  152. else if(i == 1)
  153.  
  154. {
  155.  
  156. while(c)
  157.  
  158. {
  159.  
  160. ulazKriticniOdsjecak(i,0);
  161.  
  162. for(j=1; j<=5; j++)
  163.  
  164. {
  165.  
  166. ispisi(i, j, c);
  167. sleep(1);
  168.  
  169. }
  170.  
  171.  
  172.  
  173. izlazKriticniOdsjecak(i,0);
  174.  
  175. c--;
  176.  
  177. }
  178.  
  179. }
  180.  
  181. }
  182.  
  183.  
  184.  
  185. void obrisi(int sig)
  186.  
  187. {
  188. (void) shmdt((char*) seg);
  189.  
  190. (void) shmctl(Id, IPC_RMID, NULL);
  191.  
  192. exit(0);
  193.  
  194. }
  195.  
  196.  
  197.  
  198. int main()
  199.  
  200. {
  201.  
  202. //stvaramo novi segment
  203.  
  204. Id = shmget(IPC_PRIVATE, sizeof(int) * 100, 0600);
  205.  
  206. if(Id == -1)
  207.  
  208. {
  209.  
  210. printf("Greska! Nije uspijelo zauzimanje memorije!");
  211.  
  212. exit(1);
  213.  
  214. }
  215.  
  216.  
  217.  
  218.  
  219.  
  220. //pridruzujemo zajednicki segment var seg
  221.  
  222. seg = shmat(Id, NULL, 0);
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230. sigset(SIGINT, obrisi);
  231.  
  232.  
  233.  
  234. int i;
  235.  
  236.  
  237.  
  238. for(i=0; i<2; i++)
  239.  
  240. {
  241.  
  242. switch(fork())
  243.  
  244. {
  245.  
  246. case 0:
  247.  
  248. proces(i);
  249.  
  250. exit(0);
  251.  
  252. case -1:
  253.  
  254. printf("Proces ne moze biti stvoren!");
  255.  
  256. exit(0);
  257.  
  258. }
  259.  
  260. }
  261.  
  262.  
  263.  
  264. return 0;
  265.  
  266. }
Add Comment
Please, Sign In to add comment