我使用C ++进行编程,并使用CAS操作进行线程同步。

我使用Vtune对程序进行了概要分析,发现其中很大一部分时间花在了CAS操作上。

我看了一下汇编代码。

c++ - 理解'__atomic_compare_exchange'的汇编代码有困难-LMLPHP

分析结果表明,大部分时间都花在了“ movq%rax,(%rsi)”上,而不是在“ lock cmpxchgq%rcx,(%rdi)”上。

“ movq%rax,(%rsi)”运算与CAS操作有什么关系?
此操作正在移动哪些数据?

最佳答案

lock cmpxchgq需要很长时间。当探查器确定程序当前所在的位置时,有时它必须等待指令完成执行才能找到程序。当实际上是前一条指令如此冗长时,这导致遵循一条长且不间断的指令的报告被占用大量时间。

08-16 01:09