これは非常に基本的な場合は申し訳ありません。これは私がやっていることの単純化されたバージョンです。私はカーネルモジュールを書いています。実行中は2つの異なる物理CPUの2つのスレッドがあります。これらのスレッド間の通信を行うためにグローバル変数を使用しています。奇妙なことは、あるスレッドの書き込みがもう一方のスレッドだけで見られないことがあることです。理由は何でしょうか?1つのCPUによって書き込まれた値が他のCPUに見られないのはなぜですか?
私はそれがメモリ障壁とおそらくキャッシュ同期と関係があると思うので、書き込み後にsmp_wmb()を使用しようとしましたが、それは役に立たないようです。そして、私が知る限り、キャッシュ同期を明示的に制御することはできません。だから私はちょっと固まっている。
アイデア?
編集:説明が簡略化されたバージョンであることを明確にしてください。
多くのことがあります。カーネルモジュールは私にCを仮定させるので、変数volatileを宣言しましたか? –
@GabeSechanはい、私はそれを試みました。 – TFC
他のカーネルコードが使用するパターンに従います。また、あなたが何か信じられないほど珍しいことをやっていない限り、書き込みメモリバリアは書き込みの前にあるべきです。この価値はどんな意味を持っていますか? –