フォルスシェアリング
二つのスレッドが別々の変数に書き込んでいるのに、たまたま同じキャッシュラインに載っている状態。書き込みのたびにコヒーレンスプロトコルがライン全体を無効化し、スレッドは実際には共有していないものを奪い合う。
症状は、並列化したループがコアを増やすほど遅くなることだ。典型例は、スレッドごとに一つずつカウンタを持つ配列 long counters[8] で、8個すべてが64バイトの1ラインに収まってしまう。対策は、ホットなフィールドごとに専用のラインを割り当てるパディングやアラインメントで、C++ なら alignas(64)、Java なら @Contended(-XX:-RestrictContended が必要)、Rust なら #[repr(align(64))] を使う。見つけるには perf c2c を使い、推測はしないこと。