免费注册 查看新帖 |

Chinaunix

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

[C++] 关于BOOST ASIO线程安全性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-06 22:26 |只看该作者 |倒序浏览
本帖最后由 lonerwolf 于 2015-01-06 22:26 编辑

有两个IO对象,IO_SERVICE RUN在多个线程中。第一个SOCKET读到数据,第二个SOCKET同时也读到数据,这时候SOCKET1的处理需要调用SOKCET2.ASYNC_WRITE,而SOCKET2的处理程序中需要关闭自己。这里会起冲突吗?
Distinct objects: Safe.
Shared objects: Unsafe.
和这个问题有关系吗

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
2 [报告]
发表于 2015-01-07 00:14 |只看该作者
回复 1# lonerwolf

当然会起冲突
Distinct objects: Safe.
这句是说在不同的线程中使用不同的对象是安全的(基本上就是废话)
Shared objects: Unsafe.
这句是说在不同的线程中使用共享的对象是安全的

论坛徽章:
0
3 [报告]
发表于 2015-01-07 10:51 |只看该作者
回复 2# windoze


    那怎么解决呢

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
4 [报告]
发表于 2015-01-07 10:58 |只看该作者
既然socket1和socket2是相关的,原则上你就应该把这两个socket的处理逻辑放在一个strand里,比如:

  1. strand s(iosvc);
  2. //...
  3. socket1.async_write_some(const_buffer(buf, size), s.wrap(your_completion_handler));
  4. //...
复制代码
PS.你不会真的需要一边写一边close吧,这不是个“功能”啊

论坛徽章:
0
5 [报告]
发表于 2015-01-08 11:19 |只看该作者
本帖最后由 lonerwolf 于 2015-01-08 11:20 编辑

回复 4# windoze


    比如一个套接字对设备一个套接字对后台,其中套接字1被断开,而套接子2需要往套接字写数据,怎么不会是功能呢?对后台的套接字异常,我需要在这个线程关闭他,但对设备的套接子发现设备有数据需要发给后台,很平常的功能啊。这样用SRAND等于单线程

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
6 [报告]
发表于 2015-01-08 14:54 |只看该作者
回复 5# lonerwolf

但你说的这个场景就是在操作“两个”socket了,一个线程close其中一个,另一个线程read/write另外一个,没有同步问题啊。

论坛徽章:
0
7 [报告]
发表于 2015-01-08 20:37 |只看该作者
回复 6# windoze


    SOCKET1 THREAD 收到数据要操作SOCKET2   同时SOCKET2 THREAD也在处理中,不是同时操作SOCKET2么

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
8 [报告]
发表于 2015-01-08 21:32 |只看该作者
回复 7# lonerwolf

你搞个队列传给thread2不就行了

论坛徽章:
0
9 [报告]
发表于 2015-01-08 22:21 |只看该作者
回复 8# windoze


    队列可以啊,问题是怎么激活SOCKET2的线程啊

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
10 [报告]
发表于 2015-01-08 23:17 |只看该作者
thread2不就是在等这那个队列吗?有数据发过去不就激活了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP