Ich programmiere in Windows auf C++ (Visual Studio) Ich kann Mutex entweder mit Std :: Mutex oder CreateMutex erstellen. Was ist der Unterschied zwischen ihnen? Welche sollte ich bevorzugen und welche ist schneller? Haben sie irgendwelche Besonderheiten bei der Verwendung oder der Implimierung? oder vielleicht std :: Mutex ist nur eine Shell und verwendet CreateMutex innerhalb?Welcher Unterschied zwischen C++ Std :: Mutex und Windows CreateMutex
Antwort
std::mutex
wird von der C++ - Standard-Bibliothek zur Verfügung gestellt und ja, höchstwahrscheinlich wird es CreateMutex
unter der Haube aufrufen.
Da CreateMutex
nicht tragbar ist, wird std::mutex
generell bevorzugt.
Neben der Tatsache, dass std :: mutex plattformübergreifend ist und CreateMutex ist kein weiterer Unterschied, dass die WinAPI-Mutexe (erstellt durch CreateMutex) für die Synchronisation zwischen verschiedenen Prozessen verwendet werden können, während std :: mutex nicht verwendet werden kann Das. In diesem Sinne entspricht std :: mutex dem kritischen WinAPI-Abschnitt.
Es gibt jedoch auch andere Dinge zu beachten, z.B. wenn Sie mit std :: condition_variable oder mit WinAPI-Ereignissen zusammenarbeiten müssen (z. B. um WaitForMultipleObjects zu verwenden).
Vielleicht verwendet Std :: Mutex WinAPI Critical Section anstelle von CreateMutex innerhalb? Wie ich weiß, ist Critical Section viel schneller. – Artem
CreateMutex ist eine Win32-API-Funktion, während std :: mutex aus der C++ - Standardbibliothek stammt. Sie können CreateMutex anstelle von std :: mutex verwenden, aber der Code ist nicht von Windows nach Unix übertragbar. – 23ars
Einer ist systemunabhängig und tragbar, der andere nicht. Und es ist nicht unwahrscheinlich, dass 'std :: mutex' ein Wrapper ist, der die nativen Windows-Mutex-Primitive unter der Haube verwendet. –