Я прочитал ответ на этом сайте, в котором говорится, что спин-блокировка уменьшает накладные расходы с помощью переключений контекста, и после этого я прочитал утверждение учебника, связанное с этим:
Спин-блокировка не позволяет прерывать занятую ожидающую программу.
Мой вопрос в заголовке.
Поскольку в книге используется цикл while для обозначения реализации spin части спин-блокировки, ниже приведены мои рассуждения, пытающиеся объяснить себя с учетом этого соображения.
Это похоже на то, что если есть программа с занятым циклом ожидания, то все остальные программы (процессы) не будут выполняться вечно, но не приведет ли это к разрушению мультипрограммной среды, поскольку другие процессы больше не могут быть запущены. выполняется по истечении определенного интервала времени? Но я помню, что ОС не позволит любому процессу вечно доминировать над процессором?
Или это вообще верно для большинства архитектур, поэтому это не рекомендуется, так как степень мультипрограммирования снижается, или нужно точно знать, как долго это остановится? Извините за расплывчатый вопрос, но то, что я набрал, точно такое же, как написано в книге.
Для получения более подробной информации о моем замешательстве: я думаю, что для заданного цикла while
while (this == true);
не более чем расширенная версия
if (this == true);
if (this == true);
if (this == true);
...
...
if (this == true); // (*)
...
...
if (this == true);
...
Так почему же он не будет прерван на каком-то (*)
шаге выше, по какой-то причине, например, временной интервал для процесса закончился и из очереди готовности выбран другой процесс?
while (this == true);
выражает spin (ожидание занятости), но не spinlock, что дополнительно обеспечивает защиту от переключения процесса. - person Tsyvarev   schedule 25.12.2018