今天无意中又看到了这个贴子,以为有人更新了。
又仔细看了一下程序,我想知道原因了。
还是测试程序写的有问题,导致无锁比有锁慢。
其他人指出的问题不说了。
有一个,不应该用全局变量。
应该把globalCount放到main()函数里面,传参给thread function.
改了一下程序,再跑,时间都对了,无锁快,有锁慢。
想了一下,全局变量在初始化数据段,刚好线程函数栈是另一头地址空间,
估计开销都在这里了,导致CPU cache频繁切换。
没有用更近一步的CPU热点软件检查验证。
【 在 confinement 的大作中提到: 】
: 网上的测试例程,分别起10个线程对一个全局变量进行累加,分成累加函数无锁全局变量为long long、有锁全局变量为long long、全局变量使用原子变量三种情况
: 具体代码见:
https://www.stubbornhuang.com/781/: 纠正: 3楼说的对,没仔细看代码,这个问题估计就没什么意思了。把锁放到for里面去,结果 no.2 花了大概 55ms。 如果是就是原来的这个代码,也大致能理解,各种线程切换缓存处理命中可能会差一些
: ...................
--
FROM 103.229.218.*