gpt4 book ai didi

c - 使用在C11 GCC中使数据读写原子?

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

我从SO线程herehere中了解到,假设在操作系统/硬件级别上多线程应用程序中的数据读写是原子的,这是不安全的,并且可能导致数据损坏。我想知道使用int C11库和Linux上的GCC编译器使<stdatomic.h>变量读写的最简单方法。

如果我当前在一个线程中有一个int分配:messageBox[i] = 2,如何使该分配原子化?同样适合阅读测试,例如if (messageBox[i] == 2)

最佳答案

对于C11原子,您甚至不必使用函数。如果您的实现(=编译器)支持原子,则只需将原子说明符添加到变量声明中,然后对其进行的所有操作都是原子的:

_Atomic(int) toto = 65;
...
toto += 2; // is an atomic read-modify-write operation
...
if (toto == 67) // is an atomic read of toto

原子有其价格(它们需要更多的计算资源),但是只要您几乎不使用它们,它们就是同步线程的理想工具。

关于c - 使用<stdatomic.h>在C11 GCC中使数据读写原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59662263/

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