Замените критическую секцию замком SRW
-
29-09-2019 - |
Вопрос
Если приложение предназначено для Windows Vista или более поздней версии, можем ли мы заменить все критические секции с Замки из ТРО?Поскольку критический раздел является взаимоисключающим, для использования он эквивалентен блокировкам SRW в эксклюзивном режиме, не так ли?Согласно MSDN, SRW оптимизирован как по скорости, так и по пространству.Есть ли какой-либо недостаток в этом?Я не уверен, как CS и SRW реализованы Microsoft внутри компании.
Спасибо!
Решение
Смотрите книгу Джо Даффи "Параллельное программирование в Windows", стр. 289.
Короткий ответ на ваш вопрос - "почти".Существует семантика с рекурсивно приобретенными значениями CRITICAL_SECTION, которые отличаются для SRWL.Если ваша программа воспользовалась этими характеристиками критических разделов Win32, то вы не сможете легко полностью переключиться на SRWL.Вы могли бы, однако, обернуть SRWL в оболочку, чтобы обеспечить CS-подобную семантику, но при этом есть куча тонкостей, поэтому вам лучше придерживаться CS, если вы зависите от такого поведения.
Статья Кенни Керра немного описывает, как оба варианта реализованы внутренне.