-2

ここに画像の説明を入力してください

上記は、ライターがリーダーよりも優先されるリーダー書き込み問題の解決策です。

最初に1000人のリーダーがデータを読み取るためのコードの実行を開始し(データコードの読み取りが巨大で、スレッドごとに1秒かかると仮定します)、次に1人のライターがデータを書き込もうとします。したがって、ライターは1000人のリーダーが最初に終了するのを待つ必要があります(つまり、1000秒)。

たとえば、1人のライターが時間を更新し、多くのリーダーが時間を読み取るアプリケーションでは、ライターは1000秒待つ必要があります。これは膨大な時間です。

ライターが書き込もうとしたときに、ライターがタスクを完了するまですべてのリーダーがプリエンプトされる解決策はありますか?

4

2 に答える 2

0

「先取り」とは正確にはどういう意味ですか?問題を解決しないため、CPU からそれらを取り除くことはできません。読者は、自分が読んでいる状態が安定していることを期待しています。リーダーを「一時停止」し、書き込みロックを取得し、状態を変更し、ロックを解除してリーダーを再開すると、状態が変更され、誤動作が発生します。

読み取りロックの目的は、リーダーの実行中にデータが変更されないようにすることです。そのプロパティを削除すると、このロック戦略は意味がなくなります。

于 2012-06-15T19:52:44.480 に答える