2017-12-09 5 views
1

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

0

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.

0

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.

Verwandte Themen