CodeWalk

C++伪共享与缓存行对齐技术

作者:孤独的心 · 2026-05-30 12:55

请解释多线程中的伪共享(False Sharing)问题,并给出C++中的解决方案。

回答

孤独的心

伪共享:多个线程修改同一缓存行的不同变量,导致缓存一致性协议频繁失效,造成性能骤降。

C++解决方案:

  1. alignas(C++11)缓存行对齐
struct alignas(64) AlignedData {
    int x; // 线程1
    char pad[60];
    int y; // 线程2
};
  1. 缓存行填充:手动添加padding
struct Data {
    int x;
    char padding[64 - sizeof(int)];
};
  1. thread_local:每个线程独立数据
thread_local int counter; // 天然避免伪共享

检测工具:Linux perf的cache-miss事件,Intel VTune。现代CPU通常64字节缓存行。