Gibt es einen Unterschied zwischen Boost-den scoped Mutex und kritischen Abschnitt des winapi?
-
22-08-2019 - |
Frage
In Windows-Umgebung ist boost der scoped Mutex WinAPI kritische Abschnitte, oder etwas anderes?
Lösung
Die aktuelle Version von boost::mutex
verwendet weder eine Win32 CRITICAL_SECTION
, noch eine Win32 Mutex. Stattdessen verwendet es atomare Operationen und ein Win32-Ereignis für wartet blockiert.
Ältere Versionen (Boost 1.34.1 und vor) waren ein Wrapper um CRITICAL_SECTION
unter Windows.
Im übrigen ist die Mutex selbst nicht scoped. Die boost::mutex::scoped_lock
Art und in der letzten Versionen, boost::lock_guard<boost::mutex>
und boost::unique_lock<boost::mutex>
bietet RAH-Wrapper zum Sperren eines Mutex Sie nicht vergessen, um sicherzustellen, um sie zu entriegeln.
Die boost::lock_guard<>
und boost::unique_lock<>
Vorlagen arbeiten mit jeder Art mit lock()
und unlock()
Member-Funktionen, so dass Sie sie mit Interprozess mutexes verwenden können, falls gewünscht.
Andere Tipps
Win32 des CRITICAL_SECTION kann nur unter den Fäden von ein einzelner Prozess verwendet werden. Wenn Sie etwas zwischen Prozessen verwenden müssen, benötigen Sie einen Mutex. Boost sagt nichts über kritische Abschnitte so würde davon ausgehen, ich es mutexes verwendet wird.
"scoped" bedeutet nur, dass es einen Wrapper hat die RAII , um automatisch die Mutex zu entsperren am Ende eines bestimmten Umfangs.