/ / Когато mutex отключва, уведомява ли го или уведомява? - c ++, multithreading, mutex

Когато mutex отключва, уведомява ли го или уведомява? - c ++, multithreading, mutex

Както разбирам, когато имам колекция от нишки, защитени от a std::lock_guard или std::unique_lock над std::mutex и мутексът е отключен от изричното му отключване или от заключването, което излиза извън обхвата, след това темата за чакане се съобщава.

Това уведомление е notify_one или a notify_all?

Подозирам, че бившият избягва да побърза и да чака, но би искал да е сигурен.

Отговори:

2 за отговор № 1

Това, което изглежда да питате, е дали, когато темата T0 е заключил мутекс M, и нишки T1..Tn са блокирани, опитвайки се да заключат M, какво се случва, когато T0 отключва M? Очевидно само една нишка може успешно да се заключи M, така че няма да има причина за това"уведомява" (т.е. график) повече от един сервитьор. Въпросът ви обаче не е специфичен за нито една платформа, така че отговорът може да е зависим от внедряването й. "


2 за отговор № 2

Това зависи от изпълнението. Чакащите нишки биха могли активно да чакат в потребителското пространство вътре в контекста на mutex :: lock () за кратко време, за да се отключи mutex и след като бъде отключен, няколко активно чакащи нишки могат да го открият едновременно, но само един ще може да го заключи.В противен случай, след като активният период е преминал mutex.lock () издава системен разговор и OS поставя нишката в списъка на чакащите за този mutex.Когато е отключена само една нишка се събужда / уведомява получи заключване.