В работе с производительностью мало что попадает в категорию «всегда» :) Если вы реализуете что-то, что похоже на критический раздел ОС, используя другие примитивы, то в большинстве случаев, скорее всего, будет медленнее.
Лучший способ ответить на ваш вопрос - это измерение производительности. То, как работают объекты ОС, очень зависит от сценария. Например, критические секции обычно считаются «быстрыми», если конкуренция низкая. Они также считаются быстрыми, если время блокировки меньше времени счета вращения.
Самое важное, чтобы определить, является ли конфликт в критическом разделе первым ограничивающим фактором в вашем приложении. Если нет, то просто используйте критическую секцию обычно и работайте над первичным узким местом (или шеями) ваших приложений.
Если производительность критической секции критична, вы можете рассмотреть следующее.
- Тщательно установите счетчик спин-блокировки для ваших «горячих» критических секций. Если производительность имеет первостепенное значение, то работа здесь того стоит. Помните, что в то время как спин-блокировка избегает перехода из режима пользователя в ядро, она потребляет процессорное время с бешеной скоростью - во время вращения никто больше не использует это процессорное время. Если блокировка удерживается достаточно долго, то вращающаяся нить фактически блокируется, освобождая этот ЦП для выполнения другой работы.
- Если у вас есть шаблон чтения / записи, подумайте об использовании Slim Reader / Writer (SRW) блокировок . Недостатком здесь является то, что они доступны только в Vista и Windows Server 2008 и более поздних продуктах.
- Вы можете использовать условные переменные с критическим разделом, чтобы минимизировать опросы и конфликты, пробуждая потоки только при необходимости. Опять же, они поддерживаются в Vista и Windows Server 2008 и более поздних продуктах.
- Подумайте об использовании Блокированных односвязных списков (SLIST) - они эффективны и «без блокировки». Более того, они поддерживаются в XP и Windows Server 2003 и более поздних продуктах.
- Проверьте свой код - возможно, вы сможете сломать «горячую» блокировку путем рефакторинга некоторого кода и использования операции с блокировкой или SLIST для синхронизации и связи.
В итоге - настройка сценариев, имеющих конфликт блокировки, может быть сложной (но интересной!) Работой. Сосредоточьтесь на измерении производительности ваших приложений и понимании, где ваши горячие пути Инструменты xperf из Windows Performance Tool Kit - ваш друг здесь :) Мы только что выпустили версию 4.5 в Microsoft Windows SDK для Windows 7 и .NET Framework 3.5 SP1 ( ISO здесь веб-установщик здесь ). Вы можете найти форум для инструментов xperf здесь . V4.5 полностью поддерживает Win7, Vista, Windows Server 2008 - все версии.