2009-08-27 7 views
0

Quelle est la relation entre CRITICAL_SECTION et CCriticalSection. est CCriticalSection un wrapper de CRITICAL_SECTION?Quelle est la relation entre CRITICAL_SECTION et CCriticalSection?

BTW:

Je pense que le code suivant est meanless parce que le CS est pas globale, il initiale à chaque fois avant de verrouillage() ne peut donc pas bloquer le XXX, est-il?

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

Merci beaucoup!

Répondre

2

Oui, la section MFC CCriticalSection est juste un wrapper autour d'un Win32 CRITICAL_SECTION.

Cela vaut pour pratiquement tout MFC, c'est un énorme ensemble de classes wrapper autour des fonctionnalités standard de Win32.

En ce qui concerne votre exemple de code, oui, l'utilisation d'une section critique dans ce contexte n'a pas de sens. Ce que fait une section critique s'apparente à un mutex nommé, elle garantit qu'une ressource ne peut être accessible que par un seul thread à la fois. L'utilisation correcte d'une section critique serait comme un objet accessible par plusieurs threads, puis lors de l'utilisation d'une ressource qui ne peut pas être utilisé par plus d'un fil à la fois:

MyGlobalCS.Lock(); 

// Do important work on resource 

MyGlobalCS.Unlock(); 

Notez également que s'il est difficile d'obtenir la section critique dans un emplacement partagé, vous pouvez utiliser un mutex nommé à la place.

+1

Vrai, et il vaut la peine de noter que la chose vraiment utile qu'il * pourrait * fournir, RAII, ce n'est pas le cas. Si vous utilisez C++ et MFC, vous devez * vraiment * envisager d'utiliser boost à la place. –

+0

Je dirais "à côté" pas "à la place", boost ne remplace certainement pas la majorité de ce que MFC est visé, ce sont des interfaces graphiques. – DeusAduro

Questions connexes