4
我有幾個線程同時執行並檢查自己的對象中的一個字段的值。該場是由發射線程設置是這樣的:易變易變和多核線程同步!
for (i = 0; i < ThreadCount; i++)
{
ThreadContext[i].MyField = 1;
}
在每個線程然後我檢查這個值的值:
if (MyField == 1)
{
...//do something
}
然而,我注意到,一個4核CPU,一些(4)正在運行的線程需要幾個毫秒甚至更長的時間才能看到更改後的MyField。 MyField是單個字符字段。看起來正在發生的情況是,當內存總線被檢測到更改的第一個線程超時時,所有其他線程幾乎可能在第一個線程的整個運行期間停頓。 (假設有足夠的內存壓力)。只有當第一個線程簡化了內存(並且更多地使用寄存器)時,其他線程才能看到新的值。
我檢查了asm,並沒有在這裏的方式編譯器優化。調用直接進入內存。這怎麼解決?
謝謝! Jam
你能確保你將這個答案標記爲接受嗎?謝謝。 – Kev 2011-05-25 16:28:27