C++ の release sequence の意味と役割
C++ の release sequence とはアトミック変数の読み書きに関するルールです。release sequence は release store を先頭とし,それに続く read-modify-write の列です。先頭の store,または後続の read-modify-write によって書き込まれた値を acquire load した際に store と load 間に happens-before 関係を付与するためのルールが release sequence です。この記事では release sequence が何を表すのかと,どんな時に役立つのかを解説します。
想定読者
- 最小限のオーバーヘッドで異なるスレッド間の操作に happens-before 関係を付けたい人
- C++ のメモリモデルを深く理解するために release sequence を理解しようとしている人
データ競合と happens-before 関係
この記事は,マルチスレッドのプログラムでしばしば見る,そして発見が困難であるバグ「データ競合」と,それを見つけるのによく使われる「happens-before 関係」について解説します。 筆者は特に x86-64 アーキテクチャにおけるバグ検出に興味がありますので,一般的な話というよりは x86-64 に寄せた話になります。
想定読者
- データ競合バグの発生原理やアトミック変数を使ったバグの防止方法を知りたいと思っているプログラマ
- データ競合バグを検出する手法,特に happens-before 関係を勉強したいプログラム解析手法の研究者
x86-64 & C++ を例に説明しますが,その他のアーキテクチャや言語にも通じる話もたくさんあります。
続きを読む