在我的应用程序中,我在父和子之间使用共享内存(在Linux和Windows上)。 Linux的完整代码位于https://github.com/devendermishra/SharedMemoryTest/blob/master/shmem_linux.cpp
我在Linux上有以下代码可以从共享内存中读取:
char buf[BUF_SIZE/4];
//pBuf is the shared memory location
sem_wait(semn);
//Wait for the parent process to write on the shared memory.
memcpy(buf, pBuf, sizeof(buf));
//Signal the parent
sem_post(sem0);
以下代码写:
//Data is in buf, pBuf is shared memory.
memcpy(buf, pBuf, sizeof(buf));
sem_post(semn);
sem_wait(sem0);
在这种情况下,如果一个进程长时间不写,那么其他进程将无限期地等待。一种解决方案是如果无法完成操作,则使用sem_trywait
立即返回。但在这种情况下,有人需要再次致电sem_trywait
以检查是否可以锁定。与文件类似,是否有任何类似的机制select
或poll
来检查多个信号量的状态,如果有人发出信号,执行操作而不是阻塞单个信号量?
答案 0 :(得分:3)
对于Posix信号量,没有与poll
类似的机制。
poll
等等等待它
最简单的用法是通过它而不是共享内存传递所有数据。如果将数据复制进出内核内存的成本可能是一个问题,那么你可以保留共享内存,并通过管道发送一个字符作为信号,有效地将其用作信号量。