The*_*'Or 3 c multithreading atomic c11
我从此处和此处的 SO 线程等了解到,假设多线程应用程序中的数据读/写在操作系统/硬件级别是原子的是不安全的,并且可能会导致数据损坏。我想知道在 Linux 上使用 C11 库和 GCC 编译器来实现int变量原子读写的最简单方法。<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
Run Code Online (Sandbox Code Playgroud)
原子有其价格(它们需要更多的计算资源),但只要您很少使用它们,它们就是同步线程的完美工具。
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |