Слишком поздно, чтобы ответить, но я могу облегчить понимание.Я говорю больше с точки зрения реализации, а не теоретических текстов.
Слово «блокирование» является своего рода техническим омонимом.Люди могут использовать его для сна или просто ожидания .Этот термин следует понимать в контексте использования.
Блокировка означает ожидание - Предположим, что в системе SMP поток B хочет получить спин-блокировку, удерживаемую некоторым другим потоком A. Один изМеханизм состоит в том, чтобы отключить вытеснение и продолжать вращаться на процессоре, пока B не получит его.Другой механизм, вероятно, эффективный, состоит в том, чтобы позволить другим потокам использовать процессор, в случае, если B не получает его легкими попытками.Поэтому мы планируем поток B (поскольку приоритетное включение разрешено) и передаем процессор другому потоку C. В этом случае поток B просто ожидает в очереди планировщика и возвращается со своим ходом.Поймите, что B не спит, а просто пассивно ждет вместо занятого ожидания и горящих циклов процессора.В системах BSD и Solaris существуют структуры данных, такие как турникеты , для реализации этой ситуации.
Блокировка означает спящий режим - Если поток B вместо этого сделал системный вызов, например1017 * read () ожидание данных от сетевого сокета, оно не может продолжаться, пока не получит их.Поэтому некоторые тексты случайно используют термин «блокировка» как «... заблокирован для ввода-вывода» или «... при блокировании системного вызова».На самом деле, нить B довольно спит.Существуют специальные структуры данных, известные как очереди ожидания - очень похоже на роскошные залы ожидания в аэропортах :-).Поток будет разбужен, когда ОС обнаружит доступность данных, так же, как и оператор комнаты ожидания.