コンテンツへスキップ
uencoder

Data Race

データ競合は、複数のスレッドが同期なしに同じメモリ位置へ同時に読み書きを行い、少なくとも一方が書き込みを行うことで未定義動作を引き起こす状態である。

目的

データ競合が引き起こす未定義動作とその防御策を理解する。並行プログラムの正しさにおける中心的な関心事である。

メカニズム

スレッド A が x へ書き込む一方、スレッド B が同期なしに x を読み書きすると、結果は不定になる(ちぎれた値、部分的な書き込み)。C/C++ ではデータ競合は未定義動作となる。防御策はミューテックス、アトミック操作、メモリバリア。

ユースケース

  • 並行処理コードの正しさ分析
  • スレッド安全性の監査
  • データ競合の検出

関連ツール

References