文档目录

一、什么时候用

你的多线程程序性能不随核心数线性提升,怀疑是伪共享(False Sharing)。

# 记录缓存行冲突
perf c2c record -F 99 ./my_program

# 查看报告
perf c2c report --stdio

# 输出示例:
# =================================================
#     Shared Data Cache Line Table
# =================================================
#  Total records       : 12345
#  Load records        : 8123
#  Store records       : 4222
#
#  Offset    Node    PA           Snoop    Cacheline
#  0x100     0       0x7f1234     HitM     0x7f1234
#  ↑ 这里有大量缓存行在核心间乒乓

对应代码中的伪共享:

struct Data {
    int a;  // 线程 1 频繁写
    int b;  // 线程 2 频繁写
    // a 和 b 在同一缓存行(64 字节),导致 RFO 在核心间乒乓
};

// 修复:用 alignas(64) 分开到不同缓存行
struct alignas(64) Data1 { int a; };
struct alignas(64) Data2 { int b; };