考虑:
如果互斥锁或保护变量在缓存时共享同一缓存行,是否会导致某种形式的“交叉锁定”?如果是这样,将互斥锁声明在它们保护的变量右侧(或左侧)是否是一个好习惯?将类对齐到
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)可能会避免此效果。潜在的好处是否值得超过对象的超对齐?