2009-11-21 15 views
6

Wenn zwei Threads gleichzeitig versuchen, zur selben Adresse zu schreiben, ist der Wert nach dem gleichzeitigen Schreiben garantiert einer der Werte, die die Threads zu schreiben versuchten? oder ist es möglich, eine Kombination der Bits zu erhalten?gleichzeitiges Schreiben in dieselbe Speicheradresse

Ist es auch möglich, dass ein anderer Thread die Speicheradresse liest, während sich die Bits in einem instabilen Zustand befinden?

Ich denke, die Frage läuft darauf hinaus, wenn ein Lesen oder Schreiben auf eine einzelne Speicheradresse auf Hardwareebene atomar ist.

+0

nur zur Verdeutlichung, es ist für eine einzelne ganze – Mark

Antwort

0

Eines ist sicher, für einen Datentyp Größe gleich CPU-Register kann nie Bits in instabilen Zustand haben, wird es entweder der beiden Werte

5

Ich denke, das hängt alles vom "Speichermodell" für Ihre spezielle Programmiersprache oder System ab.

+0

Sehr viel, wie abhängig von der Komplexität der verschiedenen beteiligten Teile (Sprache, Hardware, OS, Thread-Modell, etc.) dann sind alle Szenarien möglich. – workmad3

+0

C++ auf jeder Hardware-Plattform – Mark

2

Diese Fragen sind die Grundlagen eines Speichermodells für ein System oder eine Programmiersprache. Wählen Sie daher Ihr eigenes Betriebssystem und eine Programmiersprache, lesen Sie die Spezifikationen und Sie werden sehen.

0

Auf einem Computer mit mehreren Prozessoren wird möglicherweise kein einzelner "Wert" gelesen. Die zwei Threads und der dritte Threads können inkonsistente Werte anzeigen. Sie benötigen eine Speicherbarriere, um sicherzustellen, dass jeder Thread unter dieser Adresse den gleichen Wert erhält.

Abgesehen davon sind Schreibvorgänge im Allgemeinen atomar, so dass es entweder der eine oder der andere der Werte wäre, die geschrieben wurden (oder an erster Stelle waren), die gelesen werden. Sie sprechen nicht von einem Alpha-Prozessor, oder?

1

In einigen Fällen werden die Ergebnisse unvorhersehbar wie sein kann, wenn die zwei Threads schreiben an verschiedene Speicheradressen - insbesondere denke an C-Bitfeld-Strukturen, sowie Compiler-Optimierungen beim Schreiben auf benachbarte Adressen.

Wenn Sie Lust auf eine Lektüre haben, deckt Boehms Papier "Threads cannot be implemented as a library" diese und andere Nebensächlichkeiten ab.

Verwandte Themen