Mit einem bool
konnten Sie nur eine Spin-Lock implementieren. Beachten Sie, dass es eine unfaire Sperre wäre, da nichts dafür sorgt, dass sich die Kellner anstellen. Daher besteht die Möglichkeit, dass im Extremfall ein Thread für immer blockiert wird, weil er immer das Rennen verliert, um die Sperre zu erhalten.
Eine Mutex-Implementierung benötigt Unterstützung vom Betriebssystem, um die wartenden Threads in den Ruhezustand versetzen zu können. Ein Mutex benötigt also ein Flag, das angibt, ob es gesperrt ist, und eine Form eines Warteschlangendeskriptors, der es ermöglicht, wartende Threads in den Ruhezustand zu versetzen und sie zu wecken. Wenn der Mutex in der Lage sein soll, rekursives Sperren, Robustheit, optionales Drehen, Prioritätsinversionsschutz usw. zu unterstützen, würde er noch mehr Mitglieder benötigen.
"Ein Mutex könnte über eine einfache' std :: atomic 'implementiert werden" bedeutet nicht, dass es die optimale Implementierung ist. –
'atomare' ist ein 'mutex' des armen Mannes ... ich bedeute, ** wirklich ** der des armen Mannes. –
Griwes
Ich frage mich, warum manche diese Frage für unklar oder nicht nützlich halten. –