私は1000 * 1000のテーブルとそれに取り組んでいるいくつかのスレッドを持っています。各スレッドは、テーブルの特定の部分で独立して動作し、 "作業"は各繰り返しでテーブル上を移動します。Javaでの複数スレッドアクセス
他のスレッドが待機している間にスレッド全体のテーブルをロックするのではなく、スレッドごとに必要なセルだけをロックしたいと思います。 私は、スレッドごとに必要な "ブロック"のセルをロックしようとしています。
私の考えは、Lock [][]gridLock=new Lock[1000][1000];
のようなロックテーブルを作成し、各スレッドに必要なセルをロックすることです。
これは、必要なセルをロック/アンロックする方法として、gridlock(x,y,diameter)
とgridUnlock(x,y,diameter)
と一緒に使用されます。
これを達成するより良い方法はありますか、またはこの方法は適切ですか?
もちろん、スレッドが何をしているのかをはっきりと述べるべきです。すべてのスレッドがテーブルの1つの行で動作するようにしてください。 – luk2302
百万のロックはおそらくかなり煩雑になるでしょう。 – Kayaman
広すぎます。アクセスパターン、アクセスコスト、そしてどのような種類のデータ構成 "テーブル"があるかについて詳しく説明します。あなたのテキストはテーブルではなく*配列*または*グリッド*を示唆しています。また、アクセスタイプ(読み取り/書き込み)を決定することも非常に重要です。あなたの100万ロックのアプローチは、おそらく恐ろしく実行され、シングルスレッド化がより高速になるでしょう。その巨大なデッドロックの可能性はもちろんですが。ロックは、より適切なデータ構造を選択するだけで回避できます。 TL; DR:倉庫にはたくさんのツールがありますが、問題を知らずに良い選択をすることはできません。 – Durandal