Re: [問題] 程式設計的自我修養 Ch.1 疑問

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間12年前 (2013/06/17 06:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/5 (看更多)
※ 引述《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
多謝Descent大大分享指教
06/17 15:43, 1F
文章代碼(AID): #1HlgjynL (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HlgjynL (C_and_CPP)