C++相談室 part136
■ このスレッドは過去ログ倉庫に格納されています
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part135
https://mevius.5ch.net/test/read.cgi/tech/1522495206/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured >>118
ちょっまだキャッシュ言いますかキャッシュと参照カウントは原理上無関係なので(>>106)忘れてよろしいかと、
(参照カウンタが0より大きいからキャッシュ上のデータを消してはいけないという法は無いし、
参照カウンタが0になったからといってキャッシュ上のデータを消さなければいけないという法も無い
Webサーバというのは適用事例として好適だがダウンロード中かダウンロード完了か、という区分でしか考えないのはイクナイ
ダウンロード中にも新規のクライアントがつないでくるかもしれない
そのときダウンロード完了時に画像を破棄すればいいやという単色の思考だと、新規のクライアントが繋いで来つづける限り
画像を永久に開放できないことになり、そればかりか>>120のように、画像をAからA'に差し替えることもできない
これは画像Aの開放を、画像Aのオブジェクト自身に面倒をみさせるしかない(自身を参照するセッションスレッドが0になったとき開放させる
サーバはそれとは並行して画像A'を新規のセッションスレッドに展開できる。
こんな芸当ができるのはスマポだけ! >>121
言いたいことは分かるが、
> 画像をAからA'に差し替えることもできない
これはない。
この場合はどのみちキャッシュを別実装するしかなく、
・キャッシュ内に画像Aへの参照が残っているか
・画像Aを掴んでいるセッションが存在しているか
が別問題になり、
画像の差し替えはキャッシュ内の画像Aを無効化することにより行われる。
だから、普通に差し替えは出来る。このとき、
それ以前のセッションは画像Aのまま、それ以降の新規セッションは画像A'になる。
ただまあ、これは本筋ではないし、内容見る限りそちらも分かっているようだからもういい。
多分、shared_ptrの使いどころは、
1. インミュータブルなインタフェースで、
2. 不特定多数がランダムに掴みに来て、
3. 解放タイミングがユーザー依存で読めない場合
なのだろう。アプリはWeb鯖はそうだが、それ以外に何があるかだな。
1,3はさておき、2がね。
少数しか来ないのならunique_ptrでいいし、
演算等CPUジョブなら結局は順に処理するだけなのでこちらもunique_ptrでいい。
I/O等の他要因で引っかかってスレッドが参照を掴んだまま待機させられることが必要になる。
ファイルサーバーも近いが、こちらの場合はロック機構が必要な為、
「どのファイルが今何人にどういった権限で捕まれているか」の管理が必要であり、該当しない。
(shared_ptrを使っても大して楽にはならない) ■ このスレッドは過去ログ倉庫に格納されています