这个问题吧,首先你的no.1没什么意义,就不说了。
no.3其实就是一个线程一个线程顺序跑,一个线程没跑完之前,其他线程没法跑。所以理论上就是一个单核跑,即使其他线程被分配到其他核,也没法跑,必须等一个核跑完了,另一个核才能跑。理论上就是单核+100w次的性能。你如果测试一下单核+100w次,时间应该和你mutex版本差不多的。
no.2其实是多核同时跑,但这里你就可以看出冲突的恐怖性了,如果冲突很严重(像你这种),还不如单核跑,性能差好多。
你测试的其实是单核和多核但冲突很多的性能差别,而不是有锁和无锁的性能差别。
有锁和无锁的差别要像3楼那样理解。
【 在 confinement (禁闭) 的大作中提到: 】
: 网上的测试例程,分别起10个线程对一个全局变量进行累加,分成累加函数无锁全局变量为long long、有锁全局变量为long long、全局变量使用原子变量三种情况
: 具体代码见:
https://www.stubbornhuang.com/781/: 纠正: 3楼说的对,没仔细看代码,这个问题估计就没什么意思了。把锁放到for里面去,结果 no.2 花了大概 55ms。 如果是就是原来的这个代码,也大致能理解,各种线程切换缓存处理命中可能会差一些
: ...................
--
FROM 218.1.105.*