私は整数値を含む配列を持っているが、このように宣言:アレイからの同時読み取りはスレッドセーフですか?
int data[] = new int[n];
それぞれの値が処理されると、それは別々のスレッドで処理できるように、私は粉々に作業を分割しています必要があります。処理中に配列は変更されません。
すべての処理スレッドは、アレイの別々の部分を同時に読み取ることができますか?または、私はロックを使用する必要がありますか?
つまり、この作業命令はスレッドセーフですか?複数のスレッドによるアレイ(または他の任意のコレクション、オブジェクトのフィールドなど)の
Array is created and filled
Threads are created and started
Thread 0 reads data[0..3]
Thread 1 reads data[4..7]
Thread 2 reads data[8..n]
任意の数のスレッドが値を読み取ることができます。クリティカルセクションは、執筆が関係している場合にのみ重要です。 – Jyro117
@ Jyro117または読書!構造体の反復処理は同期させる必要があります。 –
構造体が不変であると扱われている場合、つまり構造体内部のデータへの書き込みがない場合は、構造体を同期させる必要はありません。読み込み時に構造が変更されない限り、配列は決して発生しません。 – Jyro117