免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3891 | 回复: 5
打印 上一主题 下一主题

[C++] 有没有基于共享内存的队列的例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-14 10:43 |只看该作者 |倒序浏览
tx 他们家很多都用基于共享内存的, 但是 2个进程 或者多个进程之间 如何安全的使用共享内存呢?

需要考虑的问题
1. 共享内存 是个块而不是流

2. 发生和接受方 可以并行运行

这样的例子  a 生产 b 消费   只要有足够的空间  
序列可以这样  a 生产  a 生产  a生产  (无空间) a 组赛  b 消费 b 消费  a继续生产

3. 生产进程和消费进程都可以crash 重启

4. 效率高,如果用锁,考虑持有锁进程可能crash的问题

我有一个简单的方案,但是感觉不太好,希望这里大神给点好的例子。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
2 [报告]
发表于 2016-04-14 10:54 |只看该作者
抱歉,您尚未登录,没有权限在该版块回帖


我擦, 打了长长的一小篇, 咋提示我没登录....嘞个去.

鹅厂一般用共享内存都是用一个多阶hash表, 作k-v容器, 完全不用锁, 网上也能搜到吧.
要用作队列, 一般就是用循环队列, 局限和用法网上一搜就明白.

论坛徽章:
0
3 [报告]
发表于 2016-04-14 12:03 |只看该作者
hanxin83 发表于 2016-04-14 10:54
抱歉,您尚未登录,没有权限在该版块回帖


能给个url吗?

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
4 [报告]
发表于 2016-04-14 17:50 |只看该作者
你自己琢磨嘛,,, 一块内存, 多个进程读写, 肯定有一块特定区域是做索引的,标记着那一块可读 可写 具体偏移位置,至于用不用HASH,是根据情况选择的问题。

论坛徽章:
0
5 [报告]
发表于 2016-04-19 11:54 |只看该作者
共享内存总是感觉不够安全,如果只是想实现多进程共享数据的话,
可以参考memcached, redis的实现。
也就是一个进程负责内存读写,和其他进程间socket通信。可能用在客户端有些过重了,但在服务器端真是方便极了。

论坛徽章:
0
6 [报告]
发表于 2016-05-05 16:59 |只看该作者
可以参考 kamailio 的共享内存实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP