2009-08-27 4 views
0

Какое отношение имеет отношение между CRITICAL_SECTION и CCriticalSection. является CCriticalSection оберткой CRITICAL_SECTION?Что такое отношение между CRITICAL_SECTION и CCriticalSection

КСТАТИ:

Я думаю, что следующий код meanless потому что CS не является глобальной, она парафировать каждый раз, прежде чем замок(), поэтому он не может заблокировать XXX, это?

int func 
{ 
CCriticalSection cs; 
cs.Lock(); 
XXX 
cs.Unlock(); 
} 

Большое спасибо!

ответ

2

Да, раздел MFC CCriticalSection - это всего лишь обертка вокруг Win32 CRITICAL_SECTION.

Это касается практически всех MFC, его огромного набора классов обертки вокруг стандартных функций Win32.

Что касается вашего примера кода, то использование критического раздела в этом контексте бессмысленно. То, что делает критический раздел, сродни именованному мьютексу, гарантирует, что к ресурсу можно получить доступ только по одному потоку за раз. Правильное использование критической секции будет как объект доступного несколько потоков, то при использовании ресурса, который не может быть использован более чем одним потоком одновременно:

MyGlobalCS.Lock(); 

// Do important work on resource 

MyGlobalCS.Unlock(); 

Также отметит, что если его трудно получить критический раздел в разделяемое место, вы можете использовать вместо него имя mutex.

+1

Истинно, и стоит отметить, что одна действительно полезная вещь, которую он может * предоставить, RAII, это не так. Если вы используете C++ и MFC, вам действительно нужно рассмотреть возможность использования boost. –

+0

Я бы сказал «рядом» не «вместо», но форсирование, конечно же, не заменит большинство того, на что нацелено MFC, что является графическим интерфейсом. – DeusAduro

 Смежные вопросы

  • Нет связанных вопросов^_^