免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: smzgl
打印 上一主题 下一主题

boost 的bug? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-07 13:15 |只看该作者
回复 10# beyond_touch


    多线程调用run(), 相当于多个消费者同时在等待.

论坛徽章:
0
12 [报告]
发表于 2010-06-07 13:22 |只看该作者
本帖最后由 beyond_touch 于 2010-06-07 13:34 编辑
回复  beyond_touch


    多线程调用run(), 相当于多个消费者同时在等待.
smzgl 发表于 2010-06-07 13:15



到底还是你先回复啦
smzgl  答复了您曾经在主题 boost 的bug? 发表的帖子 2010-06-07 13:15

您的帖子:
    偶只是菜鸟 偶能弱弱的问一句,为什么run要并发呢?
smzgl 说:
    多线程调用run(), 相当于多个消费者同时在等待.

我没说过那个东本是用来并发的。我只是问有什么理由要并发?
疯啦

再加一句,原来你也知道那东西不是用来并发的啊

论坛徽章:
0
13 [报告]
发表于 2010-06-07 13:35 |只看该作者
回复 10# beyond_touch

   
    按照你的说法, 我希望多个线程调用run(), 应该怎么调用, 外部如何确保它的安全, 应为正常情况下, run()不会返回.

论坛徽章:
0
14 [报告]
发表于 2010-06-07 13:43 |只看该作者
回复 12# beyond_touch


    只有一个线程调用run(), 那就是只有一个线程在处理这些完成操作. 也就是说, 如果向asio投递了多个套接字的读操作, 当多个套接字的读操作都完成的时候, 如果是单线程, 则只有一个接着一个来处理. 但是是多个线程的话, 就可以同时处理.

论坛徽章:
0
15 [报告]
发表于 2010-06-07 13:46 |只看该作者
本帖最后由 beyond_touch 于 2010-06-07 13:47 编辑
boost是1.4.3的


boost::asio::detail::task_io_service::run()中调用了typename call_stack<task_io_service>::context ctx(this);

而context 的构造函数实际是把this放到向一个堆栈顶部, 析构函数是将堆栈首个元素移除.


这两个过程都是没有加锁的.



而在所给的例子http\server4\posix_main.cpp的代码中, 多个线程同时调用了boost::asio::io_service::run(), 实际就是调用了boost::asio::detail::task_io_service::run()
这样调typename call_stack<task_io_service>::context ctx(this);的时候岂不是就有bug了?

smzgl 发表于 2010-06-04 14:11


照个样,留念。

各位大大没有回复是如此英明
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP