避免False Sharing: 多核CPU中每个核都拥有自己的L1/L2
cache,当运行多线程程序时,尽管算法上不需要共享变量,但实际执行中两个线程访问同一cache
line的数据时就会引起冲突,每个线程在读取自己的数据时也会把别人的cacheline读进来,这时一个核修改改变量,CPU的cache一致性算法会迫使另一个核的cache中包含该变量所在的cache
line无效,这就产生了false sharing(伪共享)问题. Falsing
sharing会导致大量的cache冲突,应该尽量避免。
访问全局变量和动态分配内存是falsesharing问题产生的根源,当然访问在内存中相邻的但完全不同的全局变量也可能会导致false
sharing,多使用线程本地变量是解决false sharing的根源办法。