Re: [問題] 程式設計的自我修養 Ch.1 疑問
※ 引述《descent (「雄辯是銀,沉默是金」)》之銘言:
: ※ 引述《QQ29 (我愛阿蓉)》之銘言:
: : 大家好
: : 經過版友推薦 開始看程式設計師的自我修養
: : 目前只看完第一章 等於是在複習OS...
: : 我有一些疑問
: : 想提出來討論
: : 2. 他在書上p28頁 有舉出最佳化的問題
: : 但29頁那邊 他提到加上volatile 可以做到兩件事情
: : 但馬上又補一句 "可見volatile可以完美的解決第一個問題"
: : 讓我不知道他在講啥了, 看到後面....他也沒提出解法
: : 反倒是提出 有些寫法看似沒問題卻是有淺在風險.....但還是沒講怎麼解...
: : 主要的問題在
: : 如果我們無法阻止編譯對指令做重排
: : 那該怎麼辦
: : 我寫的程式碼問題百出阿 = =
: : 他提30頁提到的barrier 說真的我從沒看過跟用過....
: : 這是硬體support的嗎?
: : 若沒support不就是沒有救了....
: : 再多執行緒的情況下 程式怎麼才能夠寫的完美....
: : 這邊看得很迷糊 想請了解的版友提供一些想法
: 我也被這問題困惑很久, 在 os 下寫應用程式, 幾乎沒用過這種指令,
: 有需要在 os 下的應用程式使用這些指令嗎?
: 還是被 os api 給包裝起來了呢?
: 這是 linux 在 x86 下使用的 memory barrier 指令。
: #define mb() asm volatile("mfence":::"memory")
: #define rmb() asm volatile("lfence":::"memory")
: #define wmb() asm volatile("sfence" ::: "memory")
: Binary Hacks--駭客秘傳技巧一百招 #94 在談這個,
: 看完就清楚了。
: 不過這樣的話, 在 os 下寫應用程式也會遇到這問題才是,
: 可是卻沒看過在 os 下的 c 應用程式用上這種指令。
: multi-thread 程式要突破兩關:
: 1. lock 機制 (使用 test-and-set 硬體指令實作)
: 2. memory ordering (使用 memory barrier 指令)
: 才有對的結果。
: 1 通常由 os api 提供 (x86 可用 bts 實作)。
: 2 我就沒看過在 os 下的應用程式要怎麼用, 只看過在 driver 階段有使用過。
通常在應用層,只有多緒程式在同步的API實作部份需要考慮這問題,並且已經被c runtime包裝過了,可以參考wikipidea上的解說
--
Sent from my Android
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 119.194.41.53
推
06/18 22:43, , 1F
06/18 22:43, 1F
推
06/19 01:43, , 2F
06/19 01:43, 2F
→
06/19 01:44, , 3F
06/19 01:44, 3F
→
06/19 01:45, , 4F
06/19 01:45, 4F
→
06/19 01:48, , 5F
06/19 01:48, 5F
→
06/19 01:51, , 6F
06/19 01:51, 6F
→
06/19 02:01, , 7F
06/19 02:01, 7F
→
06/19 02:06, , 8F
06/19 02:06, 8F
→
06/22 10:03, , 9F
06/22 10:03, 9F
→
06/22 10:05, , 10F
06/22 10:05, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):