Ich habe dieses Buch von Joseph Albahari über Threading gelesen:
Ссылка
In Teil 2 habe ich dieses Beispiel gefunden:
Ссылка
Hier ist das vorher erwähnte Beispiel:
%Vor%Thread-sichere Version:
%Vor%Ich konnte nicht verstehen, warum die Methode Assign nicht Thread-sicher ist. Sollte die Integer-Zuweisung nicht atomare Operation auf 32- und 64-Bit-Architekturen sein?
Die Zuweisung ist atomar , da jeder Lese-Thread entweder 123 oder den vorherigen Wert - nicht einen Zwischenwert - sieht. Es gibt jedoch keine Garantie, dass ein Thread den neuen Wert erst sehen kann, wenn zwei Speicherbarrieren vorhanden sind: eine Schreibspeicherbarriere im Schreibstrang und eine Lesespeicherschranke im Lese-Thread.
Wenn Sie zwei Threads wie diesen hatten (nachdem Sie _x
public oder intern gemacht haben, so dass es von anderen Arten von Kursen gelesen werden konnte - oder mit dem Code in der Klasse ThreadSafe
):
... es gibt keine Garantie, dass Thread 2 jemals enden würde, weil Thread 2 die Zuweisung von Thread 1 möglicherweise nicht "sieht".
Tags und Links c# multithreading thread-safety locking