二话不说,linux下,有码如下……
- C/C++ code
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/sem.h>int main(){ /*生成key*/ key_t key = ftok(".", 100); /*创建共享内存段*/ int shmid = shmget(key, 12, IPC_CREAT|IPC_EXCL|0600); if(shmid<0)perror("create"),exit(-1); /*挂接共享内存段*/ void* p = shmat(shmid, NULL, 0); if(p==(void*)-1)perror("at"),exit(-1); /*使用共享内存段进行通信*/ int semid = semget(key, 2, IPC_CREAT|IPC_EXCL|0600); if(semid<0)printf("%m\n"),exit(-1); semctl(semid, 0, SETVAL, 0); semctl(semid, 1, SETVAL, 1); struct sembuf op[2]; op[0].sem_num = 0; op[0].sem_op = 1; op[0].sem_flg = 0; op[1].sem_num = 1; op[1].sem_op = -1; op[1].sem_flg = 0; int* f = p; int i; for(i=100; i<=120; i++){ semop(semid, op, 2); //[b][color=#FF0000]此处不明白,请教各位大侠[/color][/b] *f = i; sleep(1); } /*脱接共享内存段*/ if(shmdt(p)<0)perror("dt"),exit(-1); /*删除共享内存段*/ if(shmctl(shmid,IPC_RMID,NULL)<0)perror("RMID"),exit(-1);}
semop(semid, op, 2); 这一句我不明白,semid这个信号集中有两个信号,在这个地方希望发生阻塞,那到底以哪个信号的sem_op 为标准去判断该不该阻塞呢???
信号量这个概念我了解,但是一到信号量集这里我就卡住了,希望大侠指导一下!
------解决方案--------------------
建议LZ看一下关于进程通讯的基础知识。
------解决方案--------------------
不是很了解 帮顶