0633デフォルトの名無しさん
2018/04/18(水) 11:35:26.22ID:uQo81sbZCやC++の仕組みのことなので、こちらで質問させていただきます。
複数のスレッドから呼ばれる関数の内部は、
CCriticalSectionを使って排他制御しています。
void Test()
{
static CCriticalSection cs;
cs.Lock();
:
cs.Unlock();
}
関数内のstatic変数は、その関数が初めて呼ばれたときに
実体が作成されると理解しているのですが、
1回目のTest()でCCriticalSectionのコンストラクタを実行している最中に
他のスレッドがTest()を呼んだ場合、このコンストラクタ自体は、
正しく排他制御されるのでしょうか?
コンストラクタが終わるまで、他のスレッドは待ってくれるのでしょうか?
それとも、CCriticalSectionの変数は、
関数の外に置かなくてはいけないものでしょうか?
MFCの内部でも、AFXPlaySystemSound()などで
同じようなことをやっているようなのですが。