如果线程与Pthread互斥锁/自旋锁同步,则可以轻松地将调用包裹到pthread_mutex_lock()
和pthread_mutex_unlock()
,例如,使用LD_PRELOAD
。这对于日志记录/调试非常有用。
是否可以使用gcc的原子内置函数执行类似操作,例如__sync_fetch_and_add
?
我想我无法向我们LD_PRELOAD
,但也许存在其他一些机制。
答案 0 :(得分:1)
我认为可以使用英特尔PIN(User Guide)之类的仪器API。例如,您可以首先检查所有使用INS_IsAtomicUpdate
执行原子更新的指令,并添加其他排除条件,以启发式方式找到__sync_fetch_and_add
生成的指令。
或者,您可以在每个asm volatile
之前安装一系列带有__sync_fetch_and_add
块的NOP,专门查看该指令序列,并检测随后的机器代码(必须是代码为__sync_fetch_and_add
生成。