2009-08-27 1 views
0

CRITICAL_SECTIONとCCriticalSectionの間の関係船は何ですか? はCCriticalSectionで、CRITICAL_SECTIONのラッパーですか?CRITICAL_SECTIONとCCriticalSectionの間の関係船は何ですか

ところで:

I次のコードは、CSがグローバルではないので、それは()ので、それはXXXをロックすることはできません、それでロックする前に、すべての回を初期meanlessあると思いますか?

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

多くのありがとうございます!

答えて

2

はいMFC CCriticalSectionセクションは、Win32 CRITICAL_SECTIONを囲む単なるラッパーです。

これは、標準的なWin32の機能の周りにあるラッパークラスの巨大なセットであるMFCのすべてを対象としています。

コード例では、はい、そのコンテキストでのクリティカルセクションの使用は無意味です。クリティカルセクションでは、名前付きミューテックスに似ていますが、一度に1つのスレッドだけがリソースにアクセスできるようにします。一度に複数のスレッドで使用することができないリソースを使用するときにクリティカルセクションの適切な使用は、その後、複数のスレッドによってアクセス可能なオブジェクトとして、次のようになります。

MyGlobalCS.Lock(); 

// Do important work on resource 

MyGlobalCS.Unlock(); 

もあれば、そのハードを取得することに注意してくださいクリティカルセクションを共有場所に追加すると、代わりにmutexという名前を使用できます。

+1

真実であり、RAIIが提供できる本当に有用なものであることは注目に値する。 C++とMFCを使用している場合は、代わりにboostを使用することを検討する必要があります。 –

+0

私は「代わりに」ではなく、「横並び」と言います。ブーストは、MFCがターゲットとしているものの大半を置き換えるものではなく、GUIです。 – DeusAduro

関連する問題