Заменить критическую секцию блокировкой SRW - PullRequest
9 голосов
/ 17 августа 2010

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

Спасибо!

1 Ответ

10 голосов
/ 19 августа 2010

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

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

...