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


SpinLock

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

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

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

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

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

См. также

Другие ресурсы

Объекты и функциональные возможности работы с потоками