Мьютексы используются для защиты критических секций. Допустим, мьютекс уже был отключен, и хотя поток, который это сделал, находится в CS, 10 других потоков находятся сразу за ним и отключают мьютекс, усыпляя себя. Когда первый поток выходит из критической секции и выполняет мьютекс, все 10 потоков просыпаются и просто возобновляют то, что они собирались сделать, а именно войти в критическую секцию? Не означает ли это, что все 10 могут одновременно оказаться в критической секции?
Вопрос
Что происходит с потоком, когда на его мьютексе выполняется операция up?
Ответы
Ответ 1 · рейтинг 1 · Greg Hewgill
Нет, только один поток проснется и станет владельцем мьютекса. Остальные останутся спать. Какой поток пробуждается, обычно недетерминировано.
Вышеизложенное является обобщением, и детали реализации будут разными в каждой системе. Например, в Java сравните Object#notify() и Объект#notifyAll().
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Когда мы должны использовать мьютекс, а когда мы должны использовать семафор
- Модульное тестирование многопоточных приложений
- Проблема многопоточности WPF MVVM
- ASP.NET сбрасывает культуру потока после использования?
- Означает ли const потокобезопасность в С++ 11?
- Манипулирование локалями с конкретными потоками в C++