[過去ログ]
マルチスレッドプログラミング相談室 (986レス)
マルチスレッドプログラミング相談室 http://toro.5ch.net/test/read.cgi/tech/997345868/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
772: デフォルトの名無しさん [sage] 02/11/13 23:58 なんか皆さん盛り上がってますが… >>745 >>769に同意。 リファレンスカウントのサンプルを見たければCOMを勉強すればよい。 それと。日本語で一所懸命書かれてもどうにも伝わりにくいようですな。 C言語で(擬似コードでも可)書いた方が意図が伝わると思いますが。 http://toro.5ch.net/test/read.cgi/tech/997345868/772
785: デフォルトの名無しさん [] 02/11/14 11:11 >772 ちみもSTAだけつかってなさい。 > C言語で(擬似コードでも可)書いた方が意図が伝わると思いますが。 そいでは、>774の Reference Counting - Part III (Multithreading!) http://www.gotw.ca/gotw/045.htm から String::~String() { bool bDelete = false; data_->cs.Lock(); //--------------------------- if( data_->refs == Unshareable || --data_->refs < 1 ) bDelete = true; data_->cs.Unlock(); //------------------------- if( bDelete) delete data_; } String::String( const String& other ) { bool bSharedIt = false; other.data_->cs.Lock(); //--------------------- if( other.data_->refs != Unshareable ) { bSharedIt = true; data_ = other.data_; ++data_->refs; } other.data_->cs.Unlock(); //------------------- if( !bSharedIt ) data_ = new StringBuf( *other.data_ ); } (つづく) http://toro.5ch.net/test/read.cgi/tech/997345868/785
923: 772 [sage] 02/11/16 02:54 #うわあ。見ないでいたらこんな事態に… #なんか終息しかけてますけど、まあ話題としては面白いのでいいけど。 ええと、>>788が重要な指摘だと思いますよ。 >>786の「実際には目的のデータであることを確認後」 この確認はどういうコードで行っているのですか? ぱっと思いつくコードは例えばこうなんですけど。 //目的のデータであることを確認 O3 = O1 ; //ここで既に参照カウントが上がってる! if (! IsWanted(O3)) { //O3生成の瞬間にO1が破棄されているとO3に新規データが入っている //エラー処理 } O2 = O1 ; //既にO3があるのでO2は要らないけど安全にコピーできる。 なんか私大間違いしてます? http://toro.5ch.net/test/read.cgi/tech/997345868/923
941: 772 [sage] 02/11/17 00:29 >>923 あ、違った。O1がBスレッドにあるという時点で 既に参照カウントがアガってなきゃいかんのか。 鬱だ…。 DataType O1; hr = pDataList->GetItem(index, &O1) ; if (FAILED(hr)) { /* エラー*/ } if (IsWanted(O1) とか。ふむ。確かにリスト側で排他したくなるし、 同時に他スレッドで削除されてると面倒。やっと分かった。 http://toro.5ch.net/test/read.cgi/tech/997345868/941
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.024s