問題の背景: 複数のスレッドが共有リソースへの読み取りおよび書き込みアクセスを実行します。書き込みスレッドは相互に排他的である必要があり、読み取りスレッドと書き込みスレッドは相互に排他的である必要があり、読み取りスレッドは相互に排他的である必要はありません。 以前、私は Java 5 の強化された並行機能に関する張先生の授業に参加しました。読み取り/書き込みロックの問題は、java.util.concurrent.locks の ReadWriteLock を使用すると簡単に解決できます。 ReadWriteLock がないと synchronized だけで何ができるのかと考えています。確かにその方が面倒です。 1. 張先生が教えたオブジェクト指向設計のアイデアを組み合わせて、まず書き込みメソッドと読み取りメソッドをカプセル化する共有リソースとしてビジネス クラス Business を設計します。 2. write は相互に排他的である必要があるため、 synchronized を直接定義します。 3. 読み取りは相互に排他的である必要はないため、読み取りを直接同期として定義することはできません。ただし、書き込みと読み取りは相互に排他的である必要があります。これを制御するにはどうすればよいですか? 考えられる 1 つの方法は、読み取りに synchronized(this){} を追加し、readThreads カウンターをセマフォとして定義することです。次のような状況を想定しています。 read[m]はスレッドの読み取りメソッドを表します。 write[n] 上記と同じ 1> read[m]がsynchronized(this){readThreads++;}を実行すると、write[n]が来て、write[n]は自身のsynchronizedによってブロックされます。 2> read[m]が何かを実行しているとき(この時点ではロックなし)、write[n]が来て、readThreads!=0であるため待機を余儀なくされます。 3> read[m]が終了するたびに、待機中のwrite[n]に通知されます。しかし、他の読み取りがあることがわかった場合、write[n]は再び無力に待機することしかできません。 4> readThreads==0 で、notifyAll が呼び出されると、read[m] と write[n] が CPU を奪い合います。write[n] が再度失敗すると、1> または 3> が表示されます。成功すると、次のようになります。 5> write[n]が起動して待機中にロックを占有すると、read[m]はsynchronized(this){readThreads++;}でブロックされます。 6>ブロックされたwrite[n]がロックを占有している場合、read[m]はsynchronized(this){readThreads++;}でブロックされます。 上記から、読み取りと書き込みは相互に排他的であると思われます。 4. 実装の詳細は次のとおりです。<誤りがあれば指摘してください>
考え: 5. 頻繁に読み取る場合、readThreads が長時間 != 0 になり、書き込みスレッドが不足します。どうすれば解決できますか? オリジナルリンク: http://www.cnblogs.com/hottea4Goodspeed/archive/2012/03/06/2381257.html 【編集者のおすすめ】
|
<<: Google のアルゴリズムが明らかに: 検索リクエストは平均 2,400 キロメートル往復移動します
>>: A* 検索アルゴリズム (実行可能なソース コード付き)
AIとビッグデータの時代に、最初の開発言語となるのは誰でしょうか?これは議論の余地のない質問です。...
10年以上が経過し、ディープラーニングは人工知能の発展の機会を提供してきました。並列コンピューティン...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
ディープラーニング モデルを本番環境に導入することは、優れたパフォーマンスのモデルをトレーニングする...
[[334740]] 01 完全に接続されたネットワーク完全に接続された高密度の線形ネットワークは、...
[[426052]]人工知能の危険性は、作家や脚本家の間で長い間人気のテーマとなってきたが、これらの...
2018年末には、FAIRの研究者らが「ImageNetの事前トレーニングの再考」と題する論文を発...
人工知能の開発にはまだまだ長い道のりが残っているようです。エルサレムのヘブライ大学の研究者らは、単一...
[[265376]] [51CTO.com クイック翻訳] 機械知能の分野における現在の成功は主に計...
自動運転については長い間議論されてきましたが、それが本当に人々の生活に不可欠なものになるのはいつでし...
テスラは、元エンジニアのアレクサンダー・ヤツコフ氏を提訴した。同氏は、同社内部のスーパーコンピュータ...
5G ネットワークの誕生と普及により、5G ネットワークのサポートにより、モノのインターネットの新...
何世紀にもわたり、人類は脳がどのように機能し、どのように情報を獲得するかを理解しようとしてきました。...