Operation, Anweisung und Interlocked
Feldvergleich lock
volatile
<:> Frage:
geht davon aus, dass eine Klasse eine öffentliche -Tischplatte enthält, auf die mehrere Threads zugegriffen werden und nur erhöht oder reduziert werden. Welche Methode ist der beste Weg, um dieses Feld zu erhöhen. Warum?
int
lock(this.locker) this.counter ;
Ändern Sie die Zählerdekoration des Zählers in Interlocked.Increment(ref this.counter);
public volatile
Ändern Sie die Zählerdekoration des Zählers in
nur mit Feldern kann die Sicherheit der Threads garantieren. Obwohl , um sicherzustellen, dass mehrere CPUs gleichzeitig auf dieselben Daten zugreifen, kann dies nicht verhindern, dass die Les- und Schreibvorgänge einverstört, was zu Fehlern führen kann.
public volatile
volatile
volatile
Die Anweisung bietet Thread -Sicherheit, indem verhindert wird, dass andere Threads den Code des Schutzfelds durchführen. Das Schloss ist jedoch relativ langsam und kann nicht erforderlich sein, um andere Fäden zu blockieren.
am besten:
lock(this.locker) this.counter ;
lock
Vergleich des Betriebs und
Der Betrieb der bei der Ausführung eines vollständigen Zauns durchgeführten Operation wird verwendet, um die Sortierung mehrerer CPUs zu verhindern.
Felder werden nur um ihre Operationen rund um die Halbscheibe platziert, sodass sie nicht verhindern werden. Für die gleichzeitige Modifikation der gemeinsamen Daten sollte derInterlocked.Increment(ref this.counter);
Das obige ist der detaillierte Inhalt vonWelches ist der optimale Ansatz für die Inkrementierung eines gemeinsam genutzten ganzzahligen Zählers über mehrere Threads: 'Lock', 'Interlocked' oder 'Volatile'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!