C_and_CPP 板


LINE

※ 引述《su31o4gj83 (哈哈哈哈哈哈哈哈哈哈哈)》之铭言: [43 : 其中提到 : : For the following case: : : pInstance_ = new WindowManager(); : : the compiler allocates space for WindowManager object, calls the constructor : and initializes pInstance_. It's quite possible that the optimizer moves : around instructions so that pInstance_ is initialized before the object has : been completely initialized. This may cause some other thread calling : getInstance() to return partially initialzed object. : [43] : 推 legnaleurc:有啊,内文不就说最佳化後有可能让pI在WM前初始化完成 07/03 17:31 : → su31o4gj83:l大, 我不太了解multithread, 为什麽多执行绪会让 07/03 17:42 : → su31o4gj83:pI在WM前初始化完成??一般的编程一定是singlethread吗 07/03 17:48 : → su31o4gj83:new某个物件new到一半就不做了, 让我有点难以接受阿XD 07/03 17:52 不是不做, 而是事件的先後发生顺序分别罢了. 他说的 "可能" 的发生顺序是这样: 1. 开始的时候, 只有一个 pInstance ptr [pInstance] 2. allocate 一块 memory, 里面还是未初始的 [pInstance] +----------+ | #$$%&^%* | | (*&^*&^# | +----------+ 3. pInstance 先指向那片 memory +----------+ | #$$%&^%* | [pInstance]------->| (*&^*&^# | +----------+ 4. 初始化那片 memory +----------+ | WindowMgr| [pInstance]------->| | +----------+ 这一切, 如果在 single thread 发生的话, 什麽事都没有. 可是, 如果是multi-thread, 用文中那种 double-check-locking 的方法的话... 万一 Thread 1 在做上面的流程, 刚做到 3 Thread 2 进来 getInstance(), 一检查就发觉 pInstance not null (为了 performance 考量, 是会先检查 null, 是 null 才去 acquire mutex, 然後才再一次检查). 然後就拿着那 pInstance 来使用了. 假设到这刻 Thread1 还没有跑完 4, Thread2 就拿着 pInstance 用的 话, 就会出问题. 那并不是 new 到一半就不做. 当然, 整个故事的大前题是: compiler 真的会这样 optimize. 这个议题在 Java 其实有讨论过很多次, 而 Java Compiler 也真 的会这样 optimize. 但问题是, 是不是真的有 C++ compiler 会这样 optimize? 至少这样的 double check lazy instantiation 做法, 在 C++ 界行之有年, 也没有听过有什麽惨况. --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82
1F:推 wowtiger:会不会是相反... new 出来还没办放到 instance 里面 07/04 16:03
2F:→ wowtiger:另一个以为还没有就有 new 一份 ... 结果 instance 乱掉 07/04 16:04
3F:推 Ebergies:相反不就是预期中会发生的事吗? lol 07/04 22:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP