Поделиться через


SpinLock

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

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

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

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

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

См. также