Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Что происходит с потоком, когда на его мьютексе выполняется операция up?

Автор вопроса: node ninjaОтветов: 1

Мьютексы используются для защиты критических секций. Допустим, мьютекс уже был отключен, и хотя поток, который это сделал, находится в CS, 10 других потоков находятся сразу за ним и отключают мьютекс, усыпляя себя. Когда первый поток выходит из критической секции и выполняет мьютекс, все 10 потоков просыпаются и просто возобновляют то, что они собирались сделать, а именно войти в критическую секцию? Не означает ли это, что все 10 могут одновременно оказаться в критической секции?

multithreadingthread-safetymutexcritical-section

Ответы

Ответ 1 · рейтинг 1 · Greg Hewgill

Нет, только один поток проснется и станет владельцем мьютекса. Остальные останутся спать. Какой поток пробуждается, обычно недетерминировано.

Вышеизложенное является обобщением, и детали реализации будут разными в каждой системе. Например, в Java сравните Object#notify() и Объект#notifyAll().

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы