首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异步共享内存读写

异步共享内存读写
EN

Stack Overflow用户
提问于 2014-09-02 09:44:18
回答 1查看 1.7K关注 0票数 3

在我的应用程序中,我在父级和子级之间(在Linux和Windows上)为IPC使用共享内存。Linux的完整代码在linux.cpp上。

我在Linux上有下面的代码可以从共享内存中读取:

代码语言:javascript
运行
复制
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);

编写以下代码:

代码语言:javascript
运行
复制
//Data is in buf, pBuf is shared memory.
memcpy(buf, pBuf, sizeof(buf));
sem_post(semn);
sem_wait(sem0);

在这种情况下,如果一个进程很长时间没有写入,那么另一个进程将无限期地等待。一种解决方案是在操作无法完成时使用sem_trywait立即返回。但是在这种情况下,需要有人再次调用sem_trywait来检查它是否可以被锁定。与文件一样,是否有类似于selectpoll的机制来检查多个信号量的状态,如果有人被发送信号,则执行操作而不是在单个信号量上被阻塞?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 09:54:26

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

我会使用管道;它由常规的文件描述符管理,所以您可以使用poll等方式等待它。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25620405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档