アカウント名:
パスワード:
キャッシュと本物が互いの排他をとって互いに更新しようとしたんじゃない?
キャッシュとディスクで別々に排他処理してたなら
1 ロック(C)→キャッシュアクセス→アンロック(C)→ロック(D)→ディスクアクセス→アンロック(D)2 ロック(D)→ディスクアクセス→アンロック(D)→ロック(C)→キャッシュアクセス→アンロック(C)
でデットロックしないと思うんだけど
1 ロック(C)→キャッシュアクセス→ロック(D)<ここでデッドロック>→ディスクアクセス→アンロック(D)→アンロック(C)2 ロック(D)→ディスクアクセス→ロック(C)<ここでデッドロック>→キャッシュアクセス→アンロック(C)→アンロック(D)
みたいに、キャッシュアクセスの中でディスクアクセス(およびその逆)があるならなら解るんだけど
ディスクとキャッシュで同じはずの値を格納している変数にアクセスして比較するわけだから、アクセス中にディスクの値が変わってしまうと意味がないんだと思う。
つまり、元々
2. ロック(D)→アクセス(D)→アクセス(C)→アンロック(D)
だったんじゃないかな。
ここでキャッシュのロックを実装してしまうと「アクセス(C)」の部分が「ロック(C)→アクセス(C)→アンロック(C)」に置き換わるわけだから、
2. ロック(D)→アクセス(D)→ロック(C)→アクセス(C)→アンロック(C)→アンロック(D)
になるのが自然だと思う。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
キャッシュの排他制御機構? (スコア:2)
Re: (スコア:0)
キャッシュと本物が互いの排他をとって互いに更新しようとしたんじゃない?
Re: (スコア:3, 参考になる)
・キャッシュは、ほぼ読み込みのみ
・ディスクは、読み書きがある
・キャッシュとディスクはネットワーク上の別ノード
当初
・ディスクのみ排他処理アリ
パッチ後
・キャッシュ、ディスクともに「個々に」排他処理アリ
問題点
・トランザクション的に次の2パターンがあった
1.キャッシュアクセス → ディスクアクセス
2.ディスクアクセス → キャッシュアクセス
・キャッシュアクセス、ディスクアクセスで別々に排他処理をしていた
開けてみればシンプルなデッドロックではありますが・・・・
Re:キャッシュの排他制御機構? (スコア:0)
キャッシュとディスクで別々に排他処理してたなら
1 ロック(C)→キャッシュアクセス→アンロック(C)→ロック(D)→ディスクアクセス→アンロック(D)
2 ロック(D)→ディスクアクセス→アンロック(D)→ロック(C)→キャッシュアクセス→アンロック(C)
でデットロックしないと思うんだけど
1 ロック(C)→キャッシュアクセス→ロック(D)<ここでデッドロック>→ディスクアクセス→アンロック(D)→アンロック(C)
2 ロック(D)→ディスクアクセス→ロック(C)<ここでデッドロック>→キャッシュアクセス→アンロック(C)→アンロック(D)
みたいに、キャッシュアクセスの中でディスクアクセス(およびその逆)があるならなら解るんだけど
Re: (スコア:0)
ディスクとキャッシュで同じはずの値を格納している変数にアクセスして比較するわけだから、アクセス中にディスクの値が変わってしまうと意味がないんだと思う。
つまり、元々
2. ロック(D)→アクセス(D)→アクセス(C)→アンロック(D)
だったんじゃないかな。
ここでキャッシュのロックを実装してしまうと
「アクセス(C)」の部分が「ロック(C)→アクセス(C)→アンロック(C)」に置き換わるわけだから、
2. ロック(D)→アクセス(D)→ロック(C)→アクセス(C)→アンロック(C)→アンロック(D)
になるのが自然だと思う。