Заменить критическую секцию блокировкой SRW

Если приложение предназначено для Windows Vista или более поздней версии, можем ли мы заменить все критические секции на блокировки SRW ? Поскольку критический раздел является взаимоисключающим, для использования он эквивалентен блокировкам SRW в исключительном режиме, верно? Согласно MSDN, SRW оптимизирован как по скорости, так и по пространству. Есть ли какой-то недостаток для этого? Я не уверен, как CS и SRW реализованы внутри Microsoft.

Спасибо!

12
задан Crend King 17 August 2010 в 02:01
поделиться

1 ответ

См. Книгу Джо Даффи «Параллельное программирование в Windows», стр. 289.

Краткий ответ на ваш вопрос - «почти». Есть семантика с рекурсивно полученными CRITICAL_SECTION, которые отличаются для SRWL. Если ваша программа воспользовалась этими характеристиками критических секций Win32, вы не сможете легко переключиться на SRWL. Однако вы можете обернуть SRWL в оболочку, чтобы обеспечить семантику, подобную CS, но при этом есть множество тонкостей, поэтому вам лучше придерживаться CS, если вы зависите от такого поведения.

В статье Кенни Керра немного рассказывается о внутренней реализации обоих.

12
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: