系统相关
首页 > 系统相关> > c-异步共享内存读/写

c-异步共享内存读/写

作者:互联网

在我的应用程序中,我正在使用父级和子级之间的IPC共享内存(在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来检查它是否可以被锁定.像文件一样,是否有类似的机制来选择或轮询以检查多个信号量的状态,并且如果有人发出信号,则执行操作而不是被单个信号量阻塞?

解决方法:

Posix信号量没有类似于轮询的机制.

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

最简单的用途是通过所有数据而不是共享内存.如果将数据复制进出内核内存的开销很成问题,那么您可以保留共享内存,并通过管道将单个字符作为信号发送,从而有效地将其用作信号量.

标签:shared-memory,semaphore,c-3,linux,c-4
来源: https://codeday.me/bug/20191121/2050819.html