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