【发布时间】:2019-10-29 04:01:31
【问题描述】:
按照我找到的方法here on SO,我将未命名的信号量放在一个进程中的共享内存中
在P0:
/* addr is a pointer to the base of the shared memory area */
sem_t *sem = (sem_t*) addr;
void *usableSharedMemory = (char*) addr + sizeof(sem_t)
sem_init(sem, 1, 0);
在 P1 中:
if ((addr = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED) {
exit(EXIT_FAILURE);
}
sem_t *my_sem = (sem_t*) addr;
...
sem_post(my_sem);
...
sem_wait(my_sem);
如果我在发布或等待之前和之后调用 sem_getvalue(my_sem),则信号量的值不会改变。我有这样的打印要调试:
int v = 0;
v = sem_getvalue(rsem, &v);
printf("BEFORE-POST:%d\n", v);
sem_post(rsem);
v = sem_getvalue(rsem, &v);
printf("AFTER-POST:%d\n", v);
在调用 sem_post 前后,信号量值为零 (0)。
【问题讨论】:
-
你从
sem_init()、sem_post()和sem_wait()得到什么返回值?因为您没有检查其中任何一个是否失败。您也没有展示如何将信号量放入共享内存中,以便其他进程可以访问它。
标签: c posix semaphore shared-memory