Здравствуйте, Философ, Вы писали:
Ф>SpinLock не стоило относить к высокоуровневым.
Spin locks активно используются в ядрах ОС, в тех случаях, когда чисто технически невозможно выполнить ожидание с переключением контекста, а можно лишь поциклить какое-то разумное время (единицы-десятки микросекунд) в надежде, что параллельный, ядерный же, код, который не может быть прерван в любой момент на сколь угодно долгое время, быстро сделает свои дела и освободит блокировку. Если тщательно не следить за временем, проводимым в циклах, легко наплодить глюков — например, виндовые драйверы нередко проводят в ожидании сотни микросекунд, хотя положено не более 25.
Использовать такое на пользовательском уровне нужно с осторожностью, поскольку поток, вошедший в такой цикл, может быть прерван, и другой поток, пытающийся его дождаться, исчерпает свой квант, и тоже будет вытеснен. До какой-то частоты использования такие блокировки позволяют сэкономить на переключениях в ядро, но дальше они могут привести к резкому росту накладных расходов. Особенно в том случае, если код отлаживался на восьмиядерном процессоре, а затем запущен на двухъядерном, где вероятность прерывания потока примерно вчетверо выше.