我可以包装gcc原子内置函数吗?

时间:2014-02-07 07:09:22

标签: c gcc atomic wrapping built-in

如果线程与Pthread互斥锁/自旋锁同步,则可以轻松地将调用包裹到pthread_mutex_lock()pthread_mutex_unlock(),例如,使用LD_PRELOAD。这对于日志记录/调试非常有用。

是否可以使用gcc的原子内置函数执行类似操作,例如__sync_fetch_and_add

我想我无法向我们LD_PRELOAD,但也许存在其他一些机制。

1 个答案:

答案 0 :(得分:1)

我认为可以使用英特尔PIN(User Guide)之类的仪器API。例如,您可以首先检查所有使用INS_IsAtomicUpdate执行原子更新的指令,并添加其他排除条件,以启发式方式找到__sync_fetch_and_add生成的指令。

或者,您可以在每个asm volatile之前安装一系列带有__sync_fetch_and_add块的NOP,专门查看该指令序列,并检测随后的机器代码(必须是代码为__sync_fetch_and_add生成。