Re: [問題] 程式設計的自我修養 Ch.1 疑問
※ 引述《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 階段有使用過。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.239.51
推
06/17 15:43, , 1F
06/17 15:43, 1F
討論串 (同標題文章)