0

複数のスレッドが別々のコアで実行されており (真の並列処理)、それらが同じ変数に同時にアクセスする場合。変数を読み取るだけであることが保証されている場合、真の並列処理で読み取りを行うことができますか?

次の例を検討してください。

その変数 ( と呼ばれるbool stop) へのアクセス関数を次のように定義すると:

bool const & readOnlyAccesToVariable()  // Returns a unchangeble reference to the variable 

変数は、マスタースレッドに対してプライベートです。マスター スレッドの役割は、別々のコアで多数のワーカースレッドの実行をできるだけ同時に停止することです。が に変化すると、ワーカーは停止します。stop1

ワーカーは定期的に次のことを行います。

if (readOnlyAccesToVariable() ) break;

一部のワーカーは同時に停止しますか (つまり、停止の読み取りはシリアル化されず、並列化されます)?

4

2 に答える 2

2

スレッドが値を変更しない限り、読み取りは問題ありません。

定義による不変変数は書き込むことができないため、その点でスレッドセーフになります。

ただし、もちろん、スレッドセーフな方法で初期化されること、および初期化されるまでスレッドが読み取りを開始しないことを確認する必要があります。

于 2013-10-30T08:26:25.950 に答える