Wenn sie nur lesen, brauchen Sie nicht zu sperren.
Wenn es zwei Threads gibt, die nur eine globale Variable lesen, ist es notwendig, Mutex zu verwenden, um die globale Variable zu sperren und zu entsperren?
Wenn die Threads nur die Variable lesen und niemand darauf schreibt (nicht einer der Threads, nicht jemand anderes), dann sind Sie ohne Sperren vollkommen in Ordnung. Wenn eine gleichzeitige Änderung passieren könnte, dann müssen alle (einschließlich reiner Leser) irgendwie synchronisiert werden - durch einen Mutex, eine Lese- / Schreibsperre oder auf andere Weise.
Im Allgemeinen ist ein exklusiver Zugriff erforderlich, um zu verhindern, dass ein inkonsistenter Status angezeigt wird . Für einen Leser-Thread bedeutet das, partielle Lesevorgänge zu vermeiden .
Was heißt das? Stellen Sie sich vor, Sie haben einen Wert, der auf zwei (atomaren) Ganzzahlen gespeichert ist, z. B. Koordinaten.
%Vor% Nun lesen wir i
und j
, während sie modifiziert werden, genauer gesagt, wenn sich ein Writer
-Thread diagonal von (3, 4)
nach (4, 5)
bewegen möchte:
Dies wird als partielles Lesen bezeichnet: Der Reader
-Thread hat Informationen erhalten, dass das Objekt (4, 4)
ist, obwohl es nie dort war . Ich werde Sie denken lassen, was passiert, wenn diese Koordinaten verwendet werden, um die Flugbahn eines Flugzeugs zu berechnen ...
Das Vermeiden partieller Lesevorgänge ist jedoch ziemlich einfach: Mutationen sollten atomar gesehen werden.
Um Ihre Frage zu beantworten, ist die no-Synchronisation erforderlich, wenn die Lesezugriffe die einzigen Zugriffe sind. Aber wenn Sie manchmal (auch selten) die gelesenen Informationen ändern, dann brauchen Sie einen Mechanismus.
Im Allgemeinen ist ein exklusiver Zugriff erforderlich, um zu verhindern, dass ein inkonsistenter Status angezeigt wird . Für einen Leser-Thread bedeutet das, partielle Lesevorgänge zu vermeiden .
Was heißt das? Stellen Sie sich vor, Sie haben einen Wert, der auf zwei (atomaren) Ganzzahlen gespeichert ist, z. B. Koordinaten.
%Vor%Nun lesen wir %code% und %code% , während sie modifiziert werden, genauer gesagt, wenn sich ein %code% -Thread diagonal von %code% nach %code% bewegen möchte:
%Vor%Dies wird als partielles Lesen bezeichnet: Der %code% -Thread hat Informationen erhalten, dass das Objekt %code% ist, obwohl es nie dort war . Ich werde Sie denken lassen, was passiert, wenn diese Koordinaten verwendet werden, um die Flugbahn eines Flugzeugs zu berechnen ...
Das Vermeiden partieller Lesevorgänge ist jedoch ziemlich einfach: Mutationen sollten atomar gesehen werden.
Um Ihre Frage zu beantworten, ist die no-Synchronisation erforderlich, wenn die Lesezugriffe die einzigen Zugriffe sind. Aber wenn Sie manchmal (auch selten) die gelesenen Informationen ändern, dann brauchen Sie einen Mechanismus.
Wenn sie nur lesen, brauchen Sie nicht zu sperren.
Wenn es zwei Threads gibt, die nur eine globale Variable lesen, ist es notwendig, Mutex zu verwenden, um die globale Variable zu sperren und zu entsperren?
Wenn sie nur lesen, dann brauchen sie keine Sperre, aber wenn das nicht der Fall ist, dann denke ich, dass mutex sicherstellen wird, dass der Lese-Thread keine Ressourcen verbraucht, während er nichts zu tun hat.
So etwas wie: -
%Vor%Gleiches gilt für %code%
Nebenbei bemerkt: -
Mutex wird im Allgemeinen verwendet, um zu verhindern, dass mehrere Threads gleichzeitig auf gemeinsam genutzten Speicher oder andere Ressourcen zugreifen. Auch daran zu erinnern, dass es nichts selbst sperrt
Wenn die Threads nur die Variable lesen und niemand darauf schreibt (nicht einer der Threads, nicht jemand anderes), dann sind Sie ohne Sperren vollkommen in Ordnung. Wenn eine gleichzeitige Änderung passieren könnte, dann müssen alle (einschließlich reiner Leser) irgendwie synchronisiert werden - durch einen Mutex, eine Lese- / Schreibsperre oder auf andere Weise.
Wenn sie nur lesen, dann brauchen sie keine Sperre, aber wenn das nicht der Fall ist, dann denke ich, dass mutex sicherstellen wird, dass der Lese-Thread keine Ressourcen verbraucht, während er nichts zu tun hat.
So etwas wie: -
%Vor% Gleiches gilt für Thread2
Nebenbei bemerkt: -
Mutex wird im Allgemeinen verwendet, um zu verhindern, dass mehrere Threads gleichzeitig auf gemeinsam genutzten Speicher oder andere Ressourcen zugreifen. Auch daran zu erinnern, dass es nichts selbst sperrt