考虑:
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 ) 对齐可能会避免这种影响。潜在的好处值得对象的过度对齐吗?