std::mutex/lock_guard universell verwendbar?
-
Hallo,
ich frage mich schon seit längerem ob man z.B. den Mutex aus der std-library "universell" verwenden kann. Also für beliebige threads oder nur für
std::threadthreads?Sprich, wenn ich etwas habe wie
std::mutex some_mutex; int global_int = 0; void foo() { std::lock_guard<std::mutex> lock(some_mutex); // Sperren ++global_int; // Inkrementieren } // Starte foo mit verschiedenen threadsklappt das dann auch wenn ich
fooüber einen thread laufen lasse den ich z.B. mittels CreateThread oder _beginthreadex angeworfen habe? Oder klappt das nur mitstd::thread? Und wie ist das wenn ich verschiedene Methoden mische?
-
Ich denke zwar nicht, dass der Standard diesbezüglich Garantien abgibt, aber de facto kannst du davon ausgehen, dass diese Synchronisationsmechanismen über die entsprechenden Funktionen des OS (CreateThread, CriticalSection, etc.) und der CPU (atomare Instruktionen) implementiert, und daher universell einsetzbar sind. Fals es da Ausnahmen gibt, würde ich das auch interessieren.
Finnegan