[過去ログ]
マルチスレッドプログラミング相談室 (986レス)
マルチスレッドプログラミング相談室 http://toro.5ch.net/test/read.cgi/tech/997345868/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
942: 767=793=902=918=921 [sage] 02/11/17 02:31 >>941 参照を得る/切るタイミングでアトミックにカウントが上がる/下がる必要が あるからなぁ。 そうでないと、無効なオブジェクトを参照してしまう。 ならば、参照カウントが 0 でも有効な(というより、無効かどうか判別できる) ものを作るのも一つの手だな。 bool Object::ref(){ bool valid = false; cs_.enter(); if(refCount_ > 0){ refCount_++; valid = true; } cs_.leave(); return result; } void Object::release(){ cs_.enter(); if(refCount_ > 0){ refCount_--; if(refCount_ == 0){ garbages__.add(this); } } cs_leave(); } で、安全なタイミングで(ってそれが一番むずい気も)garbages__(グローバル変数) の要素を delete してやると。 http://toro.5ch.net/test/read.cgi/tech/997345868/942
943: 942 [sage] 02/11/17 02:32 # 続き。改行が多すぎるって言われちまった。 あるいは、Object ではなく、SharedPtr みたいな入れ物でこれをやっても良い。 SharedPtr のフィールドは Object* を格納する ptr_ と refCount_。refCount_ が 0 になったときに delete ptr_ するけど、 SharedPtr 自体は無効な状態で 残り、garbages__ に入る。 コメントくれ 736。もしくは偉い人。 http://toro.5ch.net/test/read.cgi/tech/997345868/943
944: 942 [sage] 02/11/17 02:40 >>942 ああ。result 返してるよ。ref の最後は return valid; ね。 コンパイルくらいは通すか... http://toro.5ch.net/test/read.cgi/tech/997345868/944
952: 942 [sage] 02/11/17 22:45 >>946 いやだから。 List で排他制御をかけずに安全な方法があるかを探してる。 ってあまりやると今度は俺が煽られるかな。 http://toro.5ch.net/test/read.cgi/tech/997345868/952
954: 942 [sage] 02/11/18 01:19 >>953 その特殊な場合が知りたい。 そのために、902 の List::remove では、items_[index] = NULL をもって 要素削除としてる。 いや、現実問題、こんなことしてたら、List も Object も、使う側に 知識を要求する、やっかいなクラスになるとは思う。 ただ、そうすることによってパフォーマンスが得られるなら、 それが有効な選択肢になる場合もある。 ってことで、無理問答みたいなことを続けてるわけだ。 っていうか 736 が続けてくれよこれ。 http://toro.5ch.net/test/read.cgi/tech/997345868/954
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.025s