マルチスレッドプログラミング相談室
■ このスレッドは過去ログ倉庫に格納されています
0786736=784=785
NGNGThread A Thread B
delete O1呼び出し O2 = O1 (otherがO1)
data_->cs.Lock(); other.data_->cs.Lock()
if (--data_->refs < 1)
bDelete = true;
data_->cs.Unlock();
if (bDelete) data = other.data;
delte data; ++data_->refs;
other.data_cs.Unlock()
例のコードではStringなので、ロック後解放済みだったら空の文字列
を返せばよいのですが、実際には目的のデータであることを確認後
Thread BはO1のコピーのO2を手に入れようとしているので困ってます。
目的のデータがあるかどうかの検索の最初から、コピーを手に入れるまで
と解放処理を呼び出すのもまるっきり排他制御すればできるのは明らかで
すが、極端にパフォーマンスが落ちてしまいます。
■ このスレッドは過去ログ倉庫に格納されています