【发布时间】:2013-12-21 19:15:42
【问题描述】:
大家,我来问你们如何在两个进程之间共享信号量数组??因为我用semget(..)创建了一个数组,但我不能使用shmat(..)就可以了!
对于共享内存段,我通常先使用shmget(),然后再使用shmat(..),这样子进程就可以访问它。
但是它如何与一组信号量一起工作?
我找不到任何类似的方法可以 attach() !!!
这里我使用semget() 创建一个包含 5 个信号量的数组:
/* allocate semaphores */
if ((semid = semget(IPC_PRIVATE,5,IPC_CREAT|0666)) == -1) {
printf("shmget() fallita sem id\n");
perror("semget()");
//releaseAll(bufferid,Tid,Did,semid);
exit(-4);
在另一个过程中,我尝试在使用之前附加此数组(但我正在使用 shmat,似乎无法正常工作..)
sem_t* addr1;
if((addr1=(sem_t*)shmat(semid,NULL,0))==-1){
printf("shmat() fallita sem id\n");
perror("shmat() for content");
exit(-1);// +1 per \0 finale
}
【问题讨论】:
-
你根本不需要共享内存。只是不要使用
IPC_PRIVATE,而是在两个进程中使用ftok返回的真实密钥。参见例如here.
标签: c linux posix shared-memory semaphore