gpt4 book ai didi

multithreading - gcc 中的线程安全原子操作

转载 作者:行者123 更新时间:2023-12-03 02:30:30 25 4
gpt4 key购买 nike

在我开发的一个程序中,我有很多代码如下:

pthread_mutex_lock( &frame->mutex );
frame->variable = variable;
pthread_mutex_unlock( &frame->mutex );

如果中间指令可以用原子存储替换,这显然会浪费 CPU 周期。我知道 gcc 非常有能力做到这一点,但我还没有找到很多关于这种简单的线程安全原子操作的文档。我如何用原子操作替换这组代码?

(我知道简单存储理论上应该是原子的,但我不想希望优化器不会在过程中的某个时刻搞砸它们的原子性。)

澄清:我不需要它们是严格原子的;这些变量仅用于线程同步。也就是说,线程 B 读取该值,检查其是否正确,如果不正确,则休眠。因此,即使线程 A 更新了该值,而线程 B 没有意识到它已更新,这也不是问题,因为这只是意味着线程 B 在不需要时休眠,而当它醒来时,该值将一定要正确。

最佳答案

你可以查看gcc文档。对于当前的 gcc 版本(4.3.2),它将是第 5.47 章 Built-in functions for atomic memory access - 对于其他 gcc 版本,请检查您的文档。它应该在第 5 章 - C 语言家族的扩展中。

顺便说一句,C 编译器绝对不保证简单存储操作是原子的。你不能依赖这个假设。为了使机器操作码能够原子执行,它需要 LOCK 前缀。

关于multithreading - gcc 中的线程安全原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/165931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com