имхо ТС вот о чем: допустим есть процесс который захватил спин-блокировку, теперь если этот процесс попытается снова захватить эту же блокировку, то возникнет самоблокировка.
а вот в каких системах подобной самоблокировки не возникает — я не знаю)
а вот в каких системах подобной самоблокировки не возникает
Во всех. Блокировка обычно ставится не на процесс, а на абстрактный поток (которым может быть и нить, и процесс). Если lock holder уже удерживает блокировку, система должна либо бросить exception, либо просто игнорировать вызов оставив блокирвоку неизменной.
В windows CRITICAL_SECTION рекурсивна. Хотя это конечно не спинлок в чистом виде.
Это вообще не спинлок. Это мьютекс (фьютекс, х...ютекс или что-либо подобное). Он по дефолту не спинится, я засыпает. А спин у него есть только как предварительная часть перед засыпанием, и только не больше заданного кол-ва проходов. И то, это надо отдельно включить.
Во всех. Блокировка обычно ставится не на процесс, а на абстрактный поток (которым может быть и нить, и процесс). Если lock holder уже удерживает блокировку, система должна либо бросить exception, либо просто игнорировать вызов оставив блокирвоку неизменной.
Спинлок - это средство синхронизации процессоров в SMP а не процессов или потоков, поэтому встречая блокировку перепланирования не происходит а процессор в цикле ожидает ее освобождения, отсюда и название spin. На обычных ядрах двойная блокировка не опасна, с -rt патчем ядро рухнет на двойной блокировке.