検討:
class Vector
{
double x, y, z;
// …
};
class Object
{
Vector Vec1, Vec2;
std::mutex Mtx1, Mtx2;
void ModifyVec1() { std::lock_guard Lock(Mtx1); /* … */ }
void ModifyVec2() { std::lock_guard Lock(Mtx2); /* … */ }
};
ミューテックスまたは保護された変数のいずれかが連続して格納され、キャッシュ時にキャッシュ ラインを共有する場合、一種の「クロスロック」が発生する可能性がありますか?
もしそうなら、ミューテックスが保護する変数の直後 (または前) にミューテックスを宣言するのは良い習慣ですか?
クラスをstd::hardware_destructive_interference_size
( P0154 ) に揃えると、この影響を回避できる場合があります。オブジェクトをオーバーアラインメントする価値がある潜在的な利点はありますか?