免费注册 查看新帖 |

Chinaunix

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

boost 的bug? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-04 14:11 |只看该作者 |倒序浏览
本帖最后由 smzgl 于 2010-06-07 13:51 编辑

boost是1.4.3的


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

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


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


如果这样来调用岂不是有bug了?
  1. for (int i = 0; i < 2 * CPUNUM; ++i)
  2.     boost::thread *t = new boost::thread(boost::bind(&boost::asio::io_service::run, &io_service));
复制代码
之前看错了, 在boost的例子中, 只是单个线程而已.

论坛徽章:
0
2 [报告]
发表于 2010-06-04 15:28 |只看该作者
/trunk/boost/asio/detail/task_io_service.hpp 最近更新是3月31号,从trunk弄份最新的看看吧。

论坛徽章:
0
3 [报告]
发表于 2010-06-04 17:42 |只看该作者
回复 2# 没本
对比过了, 没有区别呀.

论坛徽章:
0
4 [报告]
发表于 2010-06-04 18:14 |只看该作者
那就向作者报bug吧,他改了就永远不会有这bug了。

论坛徽章:
0
5 [报告]
发表于 2010-06-04 22:45 |只看该作者
只有当数据(变量)需要在多个线程中进行读写时才需要加锁,而从你给的信息中不能得到什么结论

论坛徽章:
0
6 [报告]
发表于 2010-06-07 09:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2010-06-07 10:20 |只看该作者
回复 4# 没本


     就是会出出现多个线程同时读写的情况,我才有这样子的疑问

论坛徽章:
0
8 [报告]
发表于 2010-06-07 11:30 |只看该作者
本帖最后由 beyond_touch 于 2010-06-07 11:35 编辑
只有当数据(变量)需要在多个线程中进行读写时才需要加锁,而从你给的信息中不能得到什么结论
tyc611 发表于 2010-06-04 22:45

对boost,我也不是很懂。所以如果你有确凿证据,请忽略我说的东西。

我同意他的观点,楼主所讲的多线程(例子中),只是两个线程(一个在等待,一个在执行run)。不存在并发保护问题。

另外,C++库的设计就是这个样子,只提供最小限度的并发保护。如果你想并发运行,需要自己提供并发保障。

偶只是菜鸟

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


    typename call_stack<task_io_service>::context ctx(this); 这句代码恰好放在上锁之前....

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


    typename call_stack::context ctx(this); 这句代码恰好放在上锁之前....
smzgl 发表于 2010-06-07 12:19
  1.   // Mutex to protect access to internal data.
  2.   boost::asio::detail::mutex mutex_;
复制代码
偶只是菜鸟
前面是我错了。那个锁根本不是提供并发保护的。
"task_io_service"是在asynchronous io分类下边。并没有什么提供并发保护的理由。
设计只是基于异步,根本没有把并发考虑在内。

楼主不同意我的想法我也不打算再回复了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP