Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <sys/ipc.h>
- #include <sys/types.h>
- #include <sys/shm.h>
- #include <pthread.h>
- struct data{
- int label;
- int flag;
- char napis[20];
- };
- void* wp1(void* arg){
- struct data *bufor;
- int* mem = (int*) arg;
- bufor = shmat((*mem),NULL,0);
- int i;
- for(i=1;i<=10;i++){
- (*bufor).label=1;
- (*bufor).flag = 1;
- strcpy((*bufor).napis, "watek 1");
- sleep(1);
- }
- }
- void* wp2(void* arg){
- struct data *bufor;
- int* mem = (int*) arg;
- bufor = shmat((*mem),NULL,0);
- int i;
- for(i=1;i<=10;i++){
- (*bufor).label=2;
- (*bufor).flag = 1;
- strcpy((*bufor).napis, "watek 2");
- sleep(1);
- }
- }
- void* w1(void* arg){
- struct data *bufor;
- int* mem = (int*) arg;
- bufor = shmat((*mem),NULL,0);
- int i;
- for(i=1;i<=10;i++){
- while((*bufor).flag == 0);
- printf("Odbiera watek 1: %s\n",(*bufor).napis);
- (*bufor).flag = 0;
- strcpy((*bufor).napis, "");
- }
- }
- void* w2(void* arg){
- struct data *bufor;
- int* mem = (int*) arg;
- bufor = shmat((*mem),NULL,0);
- int i;
- for(i=1;i<=10;i++){
- while((*bufor).flag == 0);
- printf("Odbiera watek 2: %s\n",(*bufor).napis);
- (*bufor).flag = 0;
- strcpy((*bufor).napis, "");
- }
- }
- main(){
- int pamiec1 = shmget(IPC_PRIVATE,sizeof(struct data),IPC_CREAT | 0600);
- int pamiec2 = shmget(IPC_PRIVATE,sizeof(struct data),IPC_CREAT | 0600);
- int i;
- pthread_t watek[4];
- pthread_create(&watek[1],NULL,&wp1,&pamiec1);
- pthread_create(&watek[2],NULL,&w1,&pamiec1);
- pthread_create(&watek[3],NULL,&wp2,&pamiec2);
- pthread_create(&watek[4],NULL,&w2,&pamiec2);
- for(i=1;i<=4;i++){
- pthread_join(watek[i],0);
- }
- while (wait() != -1);
- shmctl(pamiec1,IPC_RMID,NULL);
- shmctl(pamiec2,IPC_RMID,NULL);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment