400
Post/Edit Page
ハザードの制御をグローバルに行わなければいけない理由が最後の最後でわかった。ここにメモして考えをまとめる。▼ずばり、スレッドローカルなレコードをメモリプールに返却するタイミングが、スレッド消滅時のデストラクション以外に存在しないからだ。そのタイミングでアクセス可能な場所はグローバルでしかありえない。どうあがいてもハザードのいくつかの実体――スレッドローカルなレコードと、レコードが保持する返還要求済みハザードポインタの集合――は、staticにしなければならないということだ。▼これが悩ましい。グローバルヒープからAlloc/Freeしているだけと割り切れば内部構造の共有は必ずしも悪ではないが、何か起きたときにバグが追いにくくなるのは必至だ。本当なら全ての構造を利用者の文脈に閉じ込めたかった。だが、叶いそうにない。可能な限り影響範囲を抑えて、穴を開けつつも堅牢なつくりを目指すしかない。神経を使うところである。
pass:
Draft