was passiert in dem extrem unglücklichen Fall, dass zwei Prozesse genau im gleichen Moment genau & ankommen. Dies ist nicht wahrscheinlich, aber probabilistisch kann von Zeit zu Zeit passieren. Noch zufälliger nehmen wir an, dass die Sperre OPEN ist, so dass beide Prozesse die Sperre finden würden. Was geschieht?MUTEX LOCK und MUTEX UNLOCK
Antwort
Mutex implementiert mit atomare Operationen. Unterschiedliche Prozessorarchitekturen implementieren dies unterschiedlich, aber unabhängig davon, welcher Prozessor dies tut, gibt es auf der unteren Ebene immer eine Buszuteilungshardware, die für alle gleichzeitigen Speicherzugriffe die richtige Reihenfolge auswählen muss.
Auch wenn zwei Prozessoren zum selben Zeitpunkt auf denselben Mutex zugreifen, wird der Bus-Arbiter entscheiden, wer der erste sein wird und wer der zweite sein wird.
Am Ende passiert nichts zum exakt gleichen Zeitpunkt - alles ist geordnet.
Sie können mehr darüber lesen, wie Speicherzugriff funktioniert bei Fixing Gap in knowledge about C/C++ and register access
Kurz gesagt, der Prozessor nicht Speicher direkt zugreift, sondern fragt es Speicher-Controller, dies zu tun. Wenn zwei Prozessoren das Speichergerät anweisen, gleichzeitig etwas zu tun, muss es zuerst eines davon auswählen.
einen Mutex sperren ist ein Atom Prozess, so dass selbst wenn zwei Threads zu verwalten den Mutex bei genau zur gleichen Zeit zu verlangen, eine von ihnen gelingen wird, und der andere wird scheitern - das heißt, zu sagen, ein wird den Mutex sperren und der andere nicht.
Jedes andere Ergebnis bedeutet, dass der Mutex vollständig und unwiderruflich unterbrochen ist - d. H., Es ist überhaupt kein Mutex.
- 1. Mutex Unlock-Fehler, wenn ein QSemaphore
- 2. Was genau macht 'Mutex lock'?
- 3. Wie werden Mutex- und Lock-Strukturen implementiert?
- 4. Succesive Mutex Schlösser blockiert
- 5. Dead Lock im Mutex, Zustand variabler Code?
- 6. Wie std :: mutex :: lock bis Funktion
- 7. Warum benötigt ein Mutex keinen Mutex (und dieser Mutex braucht einen Mutex ...)
- 8. Unterschied zwischen std :: mutex lock function und std :: lock_guard <std::mutex>?
- 9. Sperren eines Mutex aus Mutex-Array mit Atomindex
- 10. Was ist besser std :: lock_guard <std::mutex> lock (std :: mutex mutex_var); oder std :: mutex mutex_var.lock();
- 11. Lock/Unlock mac osx
- 12. Mutex Lock Geschwindigkeit Unterschied innerhalb und außerhalb der foor Schleife
- 13. Wann verwenden Sie lock und unnamed Mutex in .NET?
- 14. Um Mutex oder nicht zu Mutex?
- 15. Boost-Mutex um
- 16. Mutex-Implementierung und Signalisierung
- 17. Fehler mit robustem Mutex
- 18. Benutzt Mutex
- 19. Mutex Verständnis
- 20. Mutex in operator []
- 21. C++ Privat Mutex Zugang
- 22. condition_variable, Mutex und Flag in einer Struktur
- 23. Warum std :: mutex eine Ausnahme auslösen, wenn ich lock() aufrufen?
- 24. Mutex Lock (JS) Wird zwischen mehreren Tabs eines Browsers geteilt?
- 25. Mutex funktioniert nicht
- 26. Ereignisbenachrichtigung ohne Mutex
- 27. std :: mutex lock hängt beim Überschreiben des neuen Operators
- 28. std :: Mutex syncronization zwischen Threads
- 29. Segmentation Fault - pthread Mutex Sperrproblem
- 30. PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init (& Mutex, param)