std :: mutex ist mit kritischen Abschnitten implementiert, weshalb es viel schneller ist als OS Mutex (unter Windows). Es ist jedoch nicht so schnell wie ein Windows-CRITICAL_SECTION.
Timings sind nur eine enge Schleife in einem einzelnen Thread:
%Vor%Meine Frage ist, was sonst noch std :: mutex macht? Ich schaute auf die Quelle, konnte ihr aber nicht folgen. Es gab jedoch zusätzliche Schritte, bevor es sich auf den Crit Sec verlagerte. Meine Fragen sind: Sind diese zusätzlichen Schritte nützlich? Das sind die zusätzlichen Schritte für; was würde ich mit CRITICAL_SECTION verpassen?
Warum haben sie es auch Mutex genannt, wenn es nicht mit einem Mutex implementiert ist?
Ein std :: mutex bietet nicht-rekursive Eigentumsrechte-Semantik. Ein CRITICAL_SECTION liefert rekursive Semantik. Daher nehme ich an, dass die zusätzliche Ebene in der std :: mutex-Implementierung (zumindest teilweise) diesen Unterschied auflöst.
Update: Durch das Durchlaufen des Codes sieht es so aus, dass std :: mutex in Form einer Queue und InterlockedX-Anweisungen anstelle eines klassischen Win32 CRITICAL_SECTION implementiert wird. Obwohl std :: mutex nicht-rekursiv ist, kann der zugrunde liegende Code in der RTL optional rekursive und sogar zeitgesteuerte Sperren verarbeiten.
Tags und Links c++ c++11 winapi mutex critical-section