Heim > Backend-Entwicklung > C++ > Welches ist der optimale Ansatz für die Inkrementierung eines gemeinsam genutzten ganzzahligen Zählers über mehrere Threads: 'Lock', 'Interlocked' oder 'Volatile'?

Welches ist der optimale Ansatz für die Inkrementierung eines gemeinsam genutzten ganzzahligen Zählers über mehrere Threads: 'Lock', 'Interlocked' oder 'Volatile'?

Linda Hamilton
Freigeben: 2025-01-27 10:51:13
Original
422 Leute haben es durchsucht

Which is the Optimal Approach for Incrementing a Shared Integer Counter Across Multiple Threads: `lock`, `Interlocked`, or `volatile`?

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);
  • Antwort:
  • public volatile
  • schlechtestes (nicht machbar):

Ä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.

    Zeiten:
  • 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 ;
  • Der Vorgang ist Atom und Thread ist sicher und bietet die effektivste und zuverlässigste Methode zum Ändern der gemeinsamen Daten. Sie führen Lese-, Inkrementierungs- und Schreibvorgänge mit einem Zeitbetrieb durch, ohne zu sperren.

lock Vergleich des Betriebs und

Feld:

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 der
    -Operationsvorgang für die Szene verwendet werden, in der der Schriftsteller nie liest und der Leser niemals in den Atomwert geschrieben wird, ist das Feld
  • anwendbar. Interlocked.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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage