Haifisch7734

watek

May 7th, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <sys/ipc.h>
  5. #include <sys/types.h>
  6. #include <sys/shm.h>
  7. #include <pthread.h>
  8.  
  9. struct data{
  10.     int label;
  11.     int flag;
  12.     char napis[20];
  13. };
  14.  
  15. void* wp1(void* arg){
  16. struct data *bufor;
  17. int* mem = (int*) arg;
  18. bufor = shmat((*mem),NULL,0);
  19. int i;
  20. for(i=1;i<=10;i++){
  21.     (*bufor).label=1;
  22.     (*bufor).flag = 1;
  23.     strcpy((*bufor).napis, "watek 1");
  24.     sleep(1);
  25.     }
  26. }
  27.  
  28. void* wp2(void* arg){
  29. struct data *bufor;
  30. int* mem = (int*) arg;
  31. bufor = shmat((*mem),NULL,0);
  32. int i;
  33. for(i=1;i<=10;i++){
  34.     (*bufor).label=2;
  35.     (*bufor).flag = 1;
  36.         strcpy((*bufor).napis, "watek 2");
  37.     sleep(1);
  38.     }
  39. }
  40.  
  41. void* w1(void* arg){
  42. struct data *bufor;
  43. int* mem = (int*) arg;
  44. bufor = shmat((*mem),NULL,0);
  45. int i;
  46. for(i=1;i<=10;i++){
  47.     while((*bufor).flag == 0);
  48.     printf("Odbiera watek 1: %s\n",(*bufor).napis);
  49.     (*bufor).flag = 0;
  50.     strcpy((*bufor).napis, "");
  51.     }
  52. }
  53.  
  54. void* w2(void* arg){
  55. struct data *bufor;
  56. int* mem = (int*) arg;
  57. bufor = shmat((*mem),NULL,0);
  58. int i;
  59. for(i=1;i<=10;i++){
  60.     while((*bufor).flag == 0);
  61.     printf("Odbiera watek 2: %s\n",(*bufor).napis);
  62.     (*bufor).flag = 0;
  63.     strcpy((*bufor).napis, "");
  64.     }
  65. }
  66.  
  67. main(){
  68. int pamiec1 = shmget(IPC_PRIVATE,sizeof(struct data),IPC_CREAT | 0600);
  69. int pamiec2 = shmget(IPC_PRIVATE,sizeof(struct data),IPC_CREAT | 0600);
  70. int i;
  71. pthread_t watek[4];
  72.  
  73. pthread_create(&watek[1],NULL,&wp1,&pamiec1);
  74. pthread_create(&watek[2],NULL,&w1,&pamiec1);
  75. pthread_create(&watek[3],NULL,&wp2,&pamiec2);
  76. pthread_create(&watek[4],NULL,&w2,&pamiec2);
  77.  
  78. for(i=1;i<=4;i++){
  79.     pthread_join(watek[i],0);
  80.     }
  81. while (wait() != -1);
  82. shmctl(pamiec1,IPC_RMID,NULL);
  83. shmctl(pamiec2,IPC_RMID,NULL); 
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment