考慮:虛假的防護成員變量共享?
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)可能會避免這種影響。潛在的益處是否值得物體的整體排列?
C++標準不要求類成員按任何特定順序進行佈局(有些注意事項在此不適用)。您可以從編譯器的文檔中確定它是否對類成員使用確定性順序(可能)。 –
@SamVarshavchik對於標準佈局類,它們必須處於聲明順序中,並且根據到目前爲止發佈的內容,這可能是標準佈局類。另外,這並不重要,因爲OP詢問特定實現的細節 –
@ Rakete1111請隨時編輯 – metalfox