免费注册 查看新帖 |

Chinaunix

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

[C++] 各位用 boost 的,用 boost 什么库最多? [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
11 [报告]
发表于 2017-08-26 18:41 |只看该作者
wlmqgzm 发表于 2017-08-26 15:08
Boost几乎所有的库都有尝试用, ASIO, 多线程 智能指针 序列化 uuid 时间日期 类型转换 ...

用的最多的是 ...

佩服,佩服。

我一直没用出什么问题来。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
12 [报告]
发表于 2017-08-27 16:39 |只看该作者
wlmqgzm 发表于 2017-08-26 15:08
Boost几乎所有的库都有尝试用, ASIO, 多线程 智能指针 序列化 uuid 时间日期 类型转换 ...

用的最多的是 ...

请教一下,stl库这么隐蔽的bug是哪个东西啊?平时项目用到stl的非常多,如果有什么问题,希望可以尽早知悉一下

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
13 [报告]
发表于 2017-08-28 16:15 |只看该作者
The first rule of C++ is don’t include boost if you can avoid it.

论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
14 [报告]
发表于 2017-08-28 18:42 |只看该作者
本帖最后由 wlmqgzm 于 2017-08-29 13:17 编辑

回复 12# w_anthony
是最常用的std库 shared_ptr, 如果使用了std::make_shared生成(这个是前提条件),在释放的时候,有微小的概率会crash, 一般测不出来,跑7X24小时测试,上100亿次测试中,会定位到某一个shared_ptr释放中产生的crash。
原因是shared_ptr 库设计的问题,主要是为了传统new和make_shared兼容,释放过程中, 在某些情况下会crash。

这个问题的首次提出的不是我们,据说当年开会讨论在C++14会议加入make_shared函数时, 有一个参会外国专家提出存在问题,并且在博客上说如果这个将就的东西通过,将是C++历史上最大的丑闻,并且认为除非那帮委员会的人都死了,否则这个错误不会被修复。传说最早make_shared 代码作者本人是支持他的,并且希望提出一个全新命名的new name shared_ptr, 以便与旧的shared_ptr指针相区别,但是C++委员会元老提出必须与旧的shared_ptr完全兼容,否则提案将不会被通过,对于作者来说,这是唯一的加入C++14标准的机会,加上X软这样的编译器巨头,在关键阶段作出了不利的错误性引导,指出X软完全可以解决此兼容性问题,形成了提案表决前一边倒的结果。 当年中国的部分C++讨论组也评价过这个事件, 当时有顶级程序员的说法是那个人在炒作自己。

我们这边也没有看懂当时C++委员会内部的辩论,也没有认识到这个问题的存在,一直到检测出BUG,  然后排查了各种可能性,找到了各种资料。最终我们参考了与会各方当时讨论的思路重写了整个shared_ptr,解决了此问题, 性能也提升了。
解决的办法很简单就是全新的shared_ptr, 只支持性能最好的make_shared生成对象, 不支持new生成对象,也不支持其他指针转共享指针。

其实, 还有一些std库有问题, std::thread 库存在 与Boost Asio库混用,最后释放时有一定概率crash问题,使用boost::thread正常。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
15 [报告]
发表于 2017-08-29 16:27 |只看该作者
回复 14# wlmqgzm

std::shared_ptr和std::thread都是C++11的标准啊,我个人目前都还未在实际项目中使用。目前用03标准暂时还是够用的,不过11的一些特性确实不错。至于你说的std::shared_ptr有微小概率出错的BUG,可以导致引发这一BUG的写法能提供一下吗?是指i2和i3这种写法不安全,i1的写法是安全的意思吗?
  1. #include <stdio.h>
  2. #include <memory>

  3. class A
  4. {
  5. public:
  6.         A() { printf("A::A\n"); }
  7.         A(const A&) { printf("A::A copy\n"); }
  8.         ~A() { printf("A::~A\n"); }
  9. };

  10. int main(int argc, char *argv[])
  11. {
  12.         {
  13.                 std::shared_ptr<A> i1 = std::make_shared<A>();
  14.                 std::shared_ptr<A> i2(new A);
  15.                 std::shared_ptr<A> i3;
  16.                 i3 = std::shared_ptr<A>(new A);
  17.         }
  18.         system("PAUSE");
  19.         return 0;
  20. }
复制代码


论坛徽章:
9
程序设计版块每日发帖之星
日期:2015-10-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-01 06:20:00程序设计版块每日发帖之星
日期:2015-11-02 06:20:00每日论坛发贴之星
日期:2015-11-02 06:20:00程序设计版块每日发帖之星
日期:2015-11-03 06:20:00程序设计版块每日发帖之星
日期:2015-11-04 06:20:00程序设计版块每日发帖之星
日期:2015-11-06 06:20:00数据库技术版块每周发帖之星
日期:2015-12-02 15:02:47数据库技术版块每日发帖之星
日期:2015-12-08 06:20:00
16 [报告]
发表于 2017-09-01 13:12 |只看该作者
回复 15# w_anthony

我们主要测试发现的是
std::shared_ptr<A> i1 = std::make_shared<A>(); 这种写法, 海量测试存在问题.
然后, 发现问题二个月, 公司就研发了更快的完全没有BUG的 shared_ptr库替换了代码中的 std::shared_ptr, 性能提升一倍的同时,消除掉了BUG.

其他的
std::shared_ptr写法, 创建效率比较低, 只在早期项目中有使用, 没有测试出问题.


论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
17 [报告]
发表于 2017-09-21 14:06 |只看该作者
如果在linux下我觉得都是可选的,win需要考虑一下boost。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP