こんな関数作ったよ。
■ このスレッドは過去ログ倉庫に格納されています
0059デフォルトの名無しさん
NGNGC++(VC++6.0)でのマルチスレッドなコードは排他とかを書くのが面倒くさい。
// オリジナルのfoo()。(スレッドセーフで無いと思ってください)
int foo0( int i ) {
if( i == 0 ) {
return -1; // エラーリターン
} else if( i < 0 ) {
throw e; // 例外を投げる
}
return var( i ); // 他の関数に委譲する
}
// スレッドセーフ版(sObjectという共通リソースがあるとする)
// sObject用のmutexを、どこか外部で作る。
HANDLE sObjectMutex = CreateMutex( NULL,FALSE,NULL );
int foo1( int i ) {
WaitForSingleObject( sObjectMutex );//ロックをかける
if( i == 0 ) {
ReleaseMutex( sObjectMutex );//エラーリターンの前に、ロック解除
return -1; // error return;
} else if( i < 0 ) {
ReleaseMutex( sObjectMutex );//例外を投げる前に、ロック解除
throw e;
}
int result = var( i );//var() に委譲し、帰り値を保存
ReleaseMutex( sObjectMutex );//リターンの前に、ロック解除
return result;//保存したvar()の帰り値でリターン
}
// このコードは、どこか間違っているかい?
■ このスレッドは過去ログ倉庫に格納されています