Ich finde, dass die std::mutex
Implementierung in Visual Studio 2013 zu langsam ist. Es verwendet einen schwergewichtigen Mutex, um sicherzustellen, dass Synchronisation auch zwischen Prozessen erreicht werden kann, was alles gut und gut ist; Es sei denn, Sie sprechen nicht mit anderen Prozessen und könnten diese zusätzliche Geschwindigkeit, die CRITICAL_SECTION
mit ihren Spin-Lock-Funktionen auf Win32 bietet, wirklich nutzen.
Ich habe versucht, ein fast_recursive_mutex
zu implementieren, das dem C ++ 11 Mutex-Konzept entspricht und alle Verpflichtungen laut Spezifikation erfüllt. In jedem Fall ist es ein Ersatz für std::mutex
, solange Sie nicht zwischen Prozessen synchronisieren.
Es funktioniert großartig mit std::lock_guard
und std::unique_lock
. Allerdings habe ich Probleme mit std::condition_variable
, weil std::condition_variable::wait(std::unique_lock<std::mutex>&)
wegen der hartcodierten Verwendung von fast_recursive_mutex
meine std::mutex
nicht zulässt.
Meine Fragen sind also:
wait()
keinen anderen Mutex-Typ zu als std::mutex
? Sie können std::condition_variable_any
für einen abschließbaren Typ verwenden .
Ich glaube, std::mutex
Implementierung in Visual Studio 2012/2013 verwendet bereits kritische Abschnitte. Überprüfen Sie einfach VSDIR\VC\crt\thr\mutex.c
Sie können dies auch empirisch überprüfen, indem Sie die std::mutex::native_handle()
-Methode verwenden und das, was zurückgegeben wird, in CRITICAL_SECTION
umsetzen.
Tags und Links c++ c++11 stl mutex condition-variable