在我处理的一个程序中,我有很多代码如下:
pthread_mutex_lock( &frame->mutex );
frame->variable = variable;
pthread_mutex_unlock( &frame->mutex );
如果中间指令可以用原子存储代替,这显然是对 CPU 周期的浪费。我知道 gcc 非常有能力做到这一点,但是我还没有找到很多关于这种简单的线程安全原子操作的文档。如何用原子操作替换这组代码?
(我知道简单的存储理论上应该是原子的,但我不想希望优化器不会在过程中的某个时刻搞砸它们的原子性。)
澄清:我不需要它们是严格原子的;这些变量仅用于线程同步。也就是说,线程 B 读取该值,检查它是否正确,如果不正确,它就休眠。所以即使线程 A 更新了值而线程 B 没有意识到它的更新,这也不是问题,因为这只是意味着线程 B 在它不需要的时候休眠了,当它醒来时,值会是正确的。