2 つのタスクが同じ共有メモリーの位置に書き込みを行うと発生します。タスクは新しい値を変数に書き込みますが、先行するタスクによって書き込まれた値を読み取りません。
次のいずれかの条件が発生しました。


ID |
コードの場所 |
説明 |
|---|---|---|
1 |
割り当てサイト |
存在しヒープメモリーに関連する場合、メモリーが割り当てられた場所と関連するコールスタックを示します。 |
2 |
並列サイト |
存在する場合、メモリーの再利用の問題を含む並列サイトの位置と関連するコールスタックを示します。 |
3 |
読み取り |
最初のアクセスがメモリー読み取りの場合、アクセスした命令と関連するコールスタックを示します。 |
4 |
書き込み |
2 番目のアクセスがメモリー書き込みの場合、アクセスした命令と関連するコールスタックを示します。 |
5 |
書き込み |
最初のアクセスがメモリー書き込みの場合、アクセスした命令と関連するコールスタックを示します。 |
int global;
void main() {
ANNOTATE_SITE_BEGIN(reuse_site); // 並列サイト開始
ANNOTATE_TASK_BEGIN(task111);
global = 111; // 読み取り/書き込み
assert(global == 111);
ANNOTATE_TASK_END();
ANNOTATE_TASK_BEGIN(task222);
global = 222; // 書き込み
assert(global == 222);
ANNOTATE_TASK_END();
ANNOTATE_SITE_END();
}この例では、2 つのタスクは同じ global 変数を使用します。それぞれのタスクは、別のタスクが書き込んだ値を読み取らないか、受け取らないことになります。
タスクが変数を共有せずに、個別のプライベート変数を持つように変更します。