我正在使用.Net 4.5(預覽... 4對於此問題目的不錯)。我在做線程工作。根據CPU架構,運行時可以有條件代碼嗎?
基於我的研究,我知道x86 CPU具有強大的內存模型,這意味着寫操作不會被重新排序。這使得釋放鎖安全。對於內存模型較弱的安騰CPU來說,情況並非如此。
我瞭解易失性,內存障礙和執行重新排序原則。
我理想的需求是在關鍵點插入內存障礙如果 CPU是Itanium,但不是x86。是否有可能動態地做到這一點,就像JIT進程中有運行時編譯器指令一樣?
如果沒有,我意識到我需要爲這兩個平臺分別構建。在那種情況下,如果沒有2套C#文件,而只是簡單地改變目標,那麼最簡單的方法是什麼?
CLR的工作是將這些差異隱藏起來。 Itanium版本具有非常不同的鎖定原語實現。避免不要利用這一點。 http://stackoverflow.com/questions/3855671/how-do-i-atomically-swap-2-ints-in-c/3855824#3855824 –
如果你想編程機器,切換到C++。 –
@HansPassant是的,但是這並不否定在IA64上鎖定發佈之前使用內存屏障的必要性,而不是在x86/x86-64上不使用內存屏障。 – IamIC