异步共享内存读/写

时间:2014-09-02 09:44:19

标签: c++ c linux shared-memory semaphore

在我的应用程序中,我在父和子之间使用共享内存(在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以检查是否可以锁定。与文件类似,是否有任何类似的机制selectpoll来检查多个信号量的状态,如果有人发出信号,执行操作而不是阻塞单个信号量?

1 个答案:

答案 0 :(得分:3)

对于Posix信号量,没有与poll类似的机制。

我会用管子;它由常规文件描述符管理,因此您可以使用poll等等

等待它

最简单的用法是通过它而不是共享内存传递所有数据。如果将数据复制进出内核内存的成本可能是一个问题,那么你可以保留共享内存,并通过管道发送一个字符作为信号,有效地将其用作信号量。