我使用C ++进行编程,并使用CAS操作进行线程同步。
我使用Vtune对程序进行了概要分析,发现其中很大一部分时间花在了CAS操作上。
我看了一下汇编代码。
分析结果表明,大部分时间都花在了“ movq%rax,(%rsi)”上,而不是在“ lock cmpxchgq%rcx,(%rdi)”上。
“ movq%rax,(%rsi)”运算与CAS操作有什么关系?
此操作正在移动哪些数据?
最佳答案
lock cmpxchgq
需要很长时间。当探查器确定程序当前所在的位置时,有时它必须等待指令完成执行才能找到程序。当实际上是前一条指令如此冗长时,这导致遵循一条长且不间断的指令的报告被占用大量时间。