Sorry, wenn das sehr einfach ist. Dies ist eine vereinfachte Version von dem, was ich mache. Ich schreibe ein Kernel-Modul. Wenn es läuft, gibt es zwei Threads, eine zwei verschiedene physische CPU. Ich verwende eine globale Variable, um bestimmte Kommunikation zwischen diesen Threads zu tun. Das Merkwürdige ist, dass manchmal das Schreiben eines Threads vom anderen nicht gesehen wird. Was könnte der Grund sein?Warum wird von einer CPU geschriebener Wert von der anderen nicht gesehen?
Ich vermute, dass es mit Speicherbarriere und vielleicht Cache-Synchronisation zu tun hat, also habe ich versucht, smp_wmb() nach dem Schreiben, aber es scheint nicht zu helfen. Und soweit ich weiß, kann ich die Cache-Synchronisation nicht explizit steuern. Also bin ich irgendwie festgefahren.
Irgendwelche Ideen?
EDIT: machen Sie es klar, dass die Beschreibung eine vereinfachte Version ist.
Könnte eine Menge Dinge sein. Da das Kernel-Modul C annimmt, haben Sie die Variable volatile deklariert? –
@GabeSechan Ja, ich habe das versucht. – TFC
Befolgen Sie die Muster, die der andere Kernel-Code verwendet. Außer wenn Sie etwas unglaublich Ungewöhnliches tun, sollte die Schreibspeicherbarriere vor dem Schreiben sein. Welche Bedeutung vermittelt dieser Wert? –