SpinLock

Структура SpinLock — это примитив низкоуровневой синхронизации со взаимоисключающей блокировкой, которая выполняет цикл ожидания, пока не получит блокировку. На многоядерных компьютерах, если предполагается короткое время ожидания и минимальный риск состязаний, SpinLock может выполняться быстрее, чем другие виды блокировок. Но мы рекомендуем использовать SpinLock только в том случае, если в ходе профилирования подтверждается существенное ухудшение производительности при работе с методом System.Threading.Monitor и методами Interlocked.

SpinLock может освободить квант процессорного времени для потока, даже не создав блокировку. Такое поведение позволяет избежать инверсии приоритетов потока, а также не мешать работе сборщика мусора. При работе с SpinLock важно гарантировать, чтобы ни один поток не устанавливал блокировку дольше, чем на очень короткий промежуток времени, и чтобы ни один поток не мог заблокироваться в режиме удержания блокировки.

Поскольку SpinLock является типом значения, его необходимо явным образом передавать по ссылке, если две копии значения должны указывать на одну и ту же блокировку.

Дополнительные сведения об использовании этого типа см. в статье о структуре System.Threading.SpinLock. Некоторые примеры есть в статье Практическое руководство. SpinLock и низкоуровневая синхронизация.

SpinLock поддерживает режим отслеживания-потоков, удобный на этапе разработки для выявления потока, который удерживает блокировку в конкретный момент времени. Режим отслеживания потоков очень полезен для отладки, но мы рекомендуем отключать его в рабочей версии программы, чтобы не снижать производительность. Дополнительные сведения см. в статье Практическое руководство. Включение режима отслеживания потоков в SpinLock.

См. также