И мне очень интересно, как это вообще могло бы работать. Если не используется inline asm, то единственный способ одному потоку увидеть действия другого - это атомарные доступы к памяти.
Не совсем без атомиков. Без "настоящих" атомиков. Любое сохранение данных в память - это атомарная операция. Вот этот момент и используется.
Спинлоки - это оптимизация, чтобы уменьшить количество сисколлов. Разве нет?
ХЗ. Мне через некоторое время стало лень читать код libpthread, но выглядит так, как будто он использует спинлоки. Согласен, что это звучит нереалистично.