Потоки и параллельное программирование действительно запутывают меня. В этой книге на странице 9 указана проблема, заключающаяся в том, что хотя поток может быть запланирован и переведен в состояние ready
, это не обязательно означает, что он установил блокировку.
Вкратце, поток (скажем, t1), ожидающий блокировки, уведомляется через condition_variable
, и поток переводится в состояние ready
, но не выполняется. Но непосредственно перед тем, как он сможет что-либо запустить, запланирован и выполняется другой поток (скажем, t2). Это означает, что условие, при котором t1 предполагает его пробуждение, больше не выполняется.
Означает ли это, что простое планирование потока или перевод его в состояние готовности не означает, что он получил блокировку? Если это так, должен ли я всегда ставить предварительное условие через некоторое время l oop? Это другое возможное значение ложного пробуждения? Кроме того, о каких других подобных случаях я должен знать?
Я всегда исходил из предположения, что если поток проснулся от ожидания (что не является ложным пробуждением), он сразу же получит блокировку (wakeup = блокировка получена, при this обстоятельство), поскольку ядро отслеживает это.
Этот вопрос тесно связан с другим моим вопросом, опубликованным здесь .
Спасибо.
Где я могу задать эти вопросы о новичках, в виде интерактивного формата с дополнительными вопросами? Они кажутся слишком глупыми для стека переполнения.