Re: 十三誡增修--08:++i/i++和--i/i--順序影響結果
※ 引述《wtchen (沒有存在感的人)》之銘言:
: 這篇有爭議,乾脆直接重寫,看大家認為如何
: (尤其希望C++的高手能補充或指正,特別是multithreading的部份)
: ==============================================================
: 08. ++i/i++ 和 --i/i-- 的結果跟你怎麼用有關
: ++i/i++ 和--i/i-- 的問題幾乎每個月都會出現,所以特別強調。
抱歉,覺得用推文空間有點窄,乾脆回文比較 free
multithread 的狀況也是蠻多的,雖然我程式沒有你們那麼厲害
不過基本上如果兩個 thread 同時執行到這行: ++i,他的結果就像
你們講的無法預期
multihread 有可能跑在只有一個 core cpu 的狀況下,這時候兩個
thread 跑 ++i 最後就真的是 i+=2,如果是單 core 但卻 enable
hyperthread 的話,這部分我有點點忘了,不過印象中依然會是
i+=2,因為物理上還是單核,這部分可以給了解詳情的人補充,
hyperthread 我不會,講的不一定對
不過現在都是多核啦,所以結果是無法預期的,會講到多核跟單核
的原因是在不同的機器上確實有機會碰到一台老是會有 race conditon
另外一台老舊的機器卻沒有問題的狀況
c++ 的最新 atomic 運算表達方式標準我不確定長得如何,因為印象
中這部分在過去一直有進步,不過應該 google 是找得到才對,再來跟
使用的 compiler 以及版本也有關係,使用前需要詳閱公開說明書
anyway,如果一個變數 i 被宣告成 static 或者什麼樣的形式,使得
變數 i 有可能會讓兩個以上的 thread concurrent 去 access 時,
用 ++ 或者 -- 是不穩當的,要嘛就是 lock,要嘛就必須確定是 atomic
operation
以上是個人的經驗,我不是很謹慎的人所以懶得再去翻找資料比對,所以
我相信會有高手出來指正或者補充的更多,能拋磚引玉我覺得也不錯。只
是剛好看到版主講到 multithread 就手癢癢獻醜
只不過我覺得單純 c/c++ 的討論就夠啦,又要再引進 multi-thread 的話
我覺得議題有點點大,因為這又可以再牽扯的更多更多,版主以及我看另外
一位網友講的東西就已經很 detail 也很專業,在更擴及下去個人是覺得有
些些 over,拙見拙文參考看看,如果有說錯先 say sorry,很怕被冠上誤人
子弟的罪。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.110.41
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1465483724.A.84A.html
※ 編輯: cgcheng (223.136.110.41), 06/09/2016 22:53:56
→
06/09 22:58, , 1F
06/09 22:58, 1F
→
06/09 22:58, , 2F
06/09 22:58, 2F
推
06/09 23:03, , 3F
06/09 23:03, 3F
→
06/09 23:03, , 4F
06/09 23:03, 4F
→
06/09 23:23, , 5F
06/09 23:23, 5F
→
06/09 23:24, , 6F
06/09 23:24, 6F
→
06/09 23:26, , 7F
06/09 23:26, 7F
推
06/09 23:27, , 8F
06/09 23:27, 8F
→
06/09 23:28, , 9F
06/09 23:28, 9F
→
06/09 23:28, , 10F
06/09 23:28, 10F
→
06/09 23:31, , 11F
06/09 23:31, 11F
→
06/09 23:32, , 12F
06/09 23:32, 12F
→
06/09 23:34, , 13F
06/09 23:34, 13F
→
06/09 23:34, , 14F
06/09 23:34, 14F
→
06/09 23:35, , 15F
06/09 23:35, 15F
→
06/09 23:36, , 16F
06/09 23:36, 16F
→
06/09 23:36, , 17F
06/09 23:36, 17F
→
06/09 23:36, , 18F
06/09 23:36, 18F
→
06/09 23:38, , 19F
06/09 23:38, 19F
推
06/09 23:45, , 20F
06/09 23:45, 20F
→
06/09 23:46, , 21F
06/09 23:46, 21F
→
06/09 23:48, , 22F
06/09 23:48, 22F
→
06/09 23:49, , 23F
06/09 23:49, 23F
→
06/09 23:52, , 24F
06/09 23:52, 24F
→
06/09 23:52, , 25F
06/09 23:52, 25F
推
06/09 23:52, , 26F
06/09 23:52, 26F
→
06/09 23:53, , 27F
06/09 23:53, 27F
→
06/09 23:54, , 28F
06/09 23:54, 28F
→
06/09 23:54, , 29F
06/09 23:54, 29F
→
06/09 23:56, , 30F
06/09 23:56, 30F
→
06/09 23:56, , 31F
06/09 23:56, 31F
推
06/09 23:58, , 32F
06/09 23:58, 32F
→
06/09 23:59, , 33F
06/09 23:59, 33F
→
06/10 00:00, , 34F
06/10 00:00, 34F
→
06/10 00:00, , 35F
06/10 00:00, 35F
→
06/10 00:00, , 36F
06/10 00:00, 36F
推
06/10 00:08, , 37F
06/10 00:08, 37F
→
06/10 00:08, , 38F
06/10 00:08, 38F
→
06/10 00:08, , 39F
06/10 00:08, 39F
還有 21 則推文
→
06/10 00:31, , 61F
06/10 00:31, 61F
→
06/10 00:31, , 62F
06/10 00:31, 62F
→
06/10 00:31, , 63F
06/10 00:31, 63F
→
06/10 00:32, , 64F
06/10 00:32, 64F
→
06/10 00:32, , 65F
06/10 00:32, 65F
→
06/10 00:32, , 66F
06/10 00:32, 66F
→
06/10 00:33, , 67F
06/10 00:33, 67F
→
06/10 00:33, , 68F
06/10 00:33, 68F
→
06/10 00:34, , 69F
06/10 00:34, 69F
推
06/10 00:34, , 70F
06/10 00:34, 70F
→
06/10 00:35, , 71F
06/10 00:35, 71F
→
06/10 00:35, , 72F
06/10 00:35, 72F
→
06/10 00:35, , 73F
06/10 00:35, 73F
→
06/10 00:36, , 74F
06/10 00:36, 74F
→
06/10 00:37, , 75F
06/10 00:37, 75F
→
06/10 00:37, , 76F
06/10 00:37, 76F
→
06/10 00:38, , 77F
06/10 00:38, 77F
→
06/10 00:38, , 78F
06/10 00:38, 78F
→
06/10 00:38, , 79F
06/10 00:38, 79F
→
06/10 00:39, , 80F
06/10 00:39, 80F
→
06/10 00:39, , 81F
06/10 00:39, 81F
→
06/10 00:40, , 82F
06/10 00:40, 82F
→
06/10 00:41, , 83F
06/10 00:41, 83F
→
06/10 00:41, , 84F
06/10 00:41, 84F
→
06/10 00:42, , 85F
06/10 00:42, 85F
→
06/10 00:42, , 86F
06/10 00:42, 86F
→
06/10 00:43, , 87F
06/10 00:43, 87F
→
06/10 00:43, , 88F
06/10 00:43, 88F
→
06/10 00:43, , 89F
06/10 00:43, 89F
→
06/10 00:44, , 90F
06/10 00:44, 90F
→
06/10 00:45, , 91F
06/10 00:45, 91F
→
06/10 00:45, , 92F
06/10 00:45, 92F
→
06/10 00:45, , 93F
06/10 00:45, 93F
推
06/10 15:28, , 94F
06/10 15:28, 94F
→
06/10 15:28, , 95F
06/10 15:28, 95F
→
06/10 15:29, , 96F
06/10 15:29, 96F
→
06/10 16:33, , 97F
06/10 16:33, 97F
推
06/10 16:50, , 98F
06/10 16:50, 98F
※ 編輯: cgcheng (223.136.110.41), 06/11/2016 03:26:36
推
06/29 16:01, , 99F
06/29 16:01, 99F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章