對不起,如果這是非常基本的。這是我正在做的簡化版本。我正在編寫一個內核模塊。當它運行時,會有兩個線程,一個兩個不同的物理CPU。我正在使用全局變量在這些線程之間進行某些通信。奇怪的是,有時一個線程的寫入不會被另一個線程看到。可能是什麼原因?爲什麼一個CPU寫入的值不被另一個CPU寫入?
我懷疑它有記憶障礙,也許緩存同步做的,所以我一直在使用smp_wmb()寫操作後嘗試過,但似乎並沒有幫助。據我所知,我不能明確地控制緩存同步。所以我有點卡住了。
任何想法?
編輯:說清楚的描述是一個簡化版本。
可能是很多事情。由於內核模塊讓我假設C,你是否聲明變量volatile? –
@GabeSechan是的,我試過了。 – TFC
遵循其他內核代碼使用的模式。另外,除非你做了非常不尋常的事情,否則寫入內存屏障應該在寫入之前。這個價值是什麼意思? –