国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux下共享內存+信號量實現

2024-06-28 13:26:12
字體:
來源:轉載
供稿:網友
linux下共享內存+信號量實現

sem1.c

 1 #include"unistd.h" 2 #include"string.h" 3 #include"stdio.h" 4 #include"stdlib.h" 5 #include"linux/types.h" 6 #include"linux/sem.h" 7 #include"linux/ipc.h" 8 #include"linux/shm.h" 9 #include"error.h"10 int main()11 {12     key_t sem_key1=10086,sem_key2=10087,shm_key=10088;13     int mutexid1,mutexid2;14     int shmid=0,count=0,*addr,j=0,temp=0;15     union semun arg1,arg2;16     struct sembuf P,V;17     /* define  P   V Operation*/18     P.sem_num=0;19     P.sem_op=-1;20     P.sem_flg=SEM_UNDO;21     V.sem_num=0;22     V.sem_op=1;23     V.sem_flg=SEM_UNDO;24     arg1.val=4;25     arg2.val=0;26 27 28     mutexid1=semget(sem_key1,1,0666|IPC_CREAT);29     mutexid2=semget(sem_key2,1,0666|IPC_CREAT);30     semctl(mutexid1,0,SETVAL,arg1);31     semctl(mutexid2,0,SETVAL,arg2);32 33 34     shmid=shmget(shm_key,sizeof(int)*7,IPC_CREAT|0600);35     addr=(int *)shmat(shmid,NULL,0);//init share memory36     *(addr)=3;37     *(addr+1)=3;38     *(addr+2)=0;39     shmdt(addr);40     PRintf("         TIPS: iput/"-1/" to stop input num./n/n");41     while(1)42     {43 44 45         /**************************************************/46 47         semop(mutexid1,&P,1);48 49 50         shmid=shmget(shm_key,sizeof(int)*7,IPC_CREAT|0600);51         addr=(int *)shmat(shmid,NULL,0);//init share memory52         j=*(addr+1);53         count=*(addr+2);54         if(j==7)j=3;55 56         printf("Please input data:  ");57         scanf("%d",&temp);58         printf("/n");59         *(addr+j)=temp;60         printf("%d   wrrite sucess./n/n",*(addr+j));61         if(*(addr+j)==-1)62         {63             shmdt(addr);64             semop(mutexid2,&V,1);65             return 0;66         }67         j++;68         count++;69         *(addr+1)=j;70         *(addr+2)=count;71         shmdt(addr);72 73 74         semop(mutexid2,&V,1);75 76     /**************************************************/77     }78     return 0;79 }

sem2.c

 1 #include"unistd.h" 2 #include"stdio.h" 3 #include"stdlib.h" 4 #include"linux/types.h" 5 #include"linux/sem.h" 6 #include"linux/ipc.h" 7 #include"linux/shm.h" 8 #include"error.h" 9 int main()10 {11     key_t sem_key1=10086,sem_key2=10087,shm_key=10088;12     int mutexid1,mutexid2;13     int shmid=0,count=0,*addr,i=0;14     union semun arg;    15     struct sembuf P,V;16     /* define  P   V operation*/17     P.sem_num=0;18     P.sem_op=-1;19     P.sem_flg=SEM_UNDO;20     V.sem_num=0;21     V.sem_op=1;22     V.sem_flg=SEM_UNDO;23 24 25     mutexid1=semget(sem_key1,1,0666|IPC_CREAT);26     mutexid2=semget(sem_key2,1,0666|IPC_CREAT);27 28 29 30 31 32     while(1)33     {34 35 36 37     /***********************************************/        38 39     semop(mutexid2,&P,1);40 41     shmid=shmget(shm_key,sizeof(int)*7,IPC_CREAT|0600);42     addr=(int *)shmat(shmid,NULL,0);//init share memory43     i=*(addr);44     count=*(addr+2);45     if(i==7)i=3;46 47 48     printf("Read  data....   ");49     printf("%d/n",*(addr+i));50     if(*(addr+i)==-1)51     {    52         shmdt(addr);53         shmctl(shmid,IPC_RMID,NULL);54         semctl(mutexid1,0,IPC_RMID,0);55         semctl(mutexid2,0,IPC_RMID,0);56         return 0;57     }58     i++;59     count--;60     *(addr)=i;61     *(addr+2)=count;62     shmdt(addr);63     64     semop(mutexid1,&V,1);65 }66 /***********************************************/        67     return 0;68 }

在gcc下需要注意Linux和sys兩個頭文件位置的選擇,否則會出現錯誤。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭州市| 科尔| 巩留县| 蕲春县| 确山县| 潜山县| 克什克腾旗| 六枝特区| 巴东县| 石首市| 兰州市| 新野县| 鄯善县| 县级市| 广昌县| 芒康县| 康乐县| 屏东县| 普格县| 凉山| 永嘉县| 河东区| 康乐县| 如东县| 文化| 丽水市| 正宁县| 金寨县| 紫阳县| 咸丰县| 曲松县| 图木舒克市| 丰原市| 珲春市| 开封县| 丰顺县| 铁岭市| 柯坪县| 华宁县| 黄骅市| 陆川县|