Ich habe einen einfachen Code geschrieben, wo ich einen unique_lock nehme und den Mutex freischalte, anstatt Entsperrung auf dem Schloss selbst aufzurufen. Wenn der erste Thread den kritischen Abschnitt betritt und my_mutex.unlock() aufruft, werden viele andere Threads gemeinsam in den kritischen Abschnitt eingefügt.Aufrufen von Entsperren auf einem Mutex, der mit einem unique_lock verknüpft ist, verursacht undefiniertes Verhalten
std::mutex my_mutex;
void sample() {
std::unique_lock<std::mutex> lock(my_mutex);
// Critical section
my_mutex.unlock();
}
Warum passiert das? Ist es falsch, Entsperren auf einem Mutex aufzurufen, der von einem unique_lock gehalten wird? Vielen Dank!
Vielen Dank! Eigentlich hatte ich keinen lokalen Mutex in meinem eigentlichen Code. Ich werde den Code in der Frage aktualisieren. – kwadhwa