Если я понимаю ваш вопрос, вы спрашиваете, почему спин-блокировки являются плохой идеей на одноядерных машинах.
Они все равно должны работать , но могут быть намного дороже, чем правдапараллельный поток:
Когда вы используете спин-блокировку, вы, по сути, утверждаете, что не думаете, что вам придется долго ждать.Вы говорите, что считаете, что лучше поддерживать временной интервал процессора с занятым циклом, чем затраты на спящий поток и переключение контекста на другой поток или процесс.Если вам нужно подождать очень короткое время, вы можете спать и быть пробужденным практически сразу, но затраты на подъем и подъем обходятся дороже, чем просто ожидание.
Скорее всего, все будет в порядкена многоядерных процессорах, поскольку они имеют гораздо лучшие профили параллелизма, чем одноядерные процессоры.На многоядерных процессорах между итерациями цикла некоторые другие потоки могли позаботиться о вашем предварительном условии.На одноядерных процессорах невозможно, чтобы кто-то другой мог вам помочь - вы заблокировали одно-единственное ядро.
Проблема здесь в том, что , если вы ждете или спите на блокировке, вы намекаете системе, что у вас еще нет всего, что вам нужно, поэтому она должна заняться другими делами и вернуться к вам позже .С помощью спин-блокировки вы никогда не говорите об этом системе, поэтому вы блокируете ее в ожидании чего-то еще, но, тем временем, вы задерживаете всю систему , поэтомучто-то еще не может произойти.