c - 如果我创建一个原子变量,线程之间对该变量的所有操作都是原子的吗?

标签 c multithreading

这段代码能正常工作吗? atomic_int 与 _Atomic(int) 有什么区别

  struct a {
    int xyz;
    volatile _Atomic(unsigned int) status;
    int eee;
    };

    threadOne(void *)
    {
    a->status |= QW;
    }


    threadTwo(void *)
    {
    a->status |= ER;
    }

最佳答案

是的,它将正常工作,即 |= 操作将是原子的

就事物的定义位置而言(这超出了您的要求):

  • _Atomic 由 C11 定义(参见 here )
  • atomic_int 在 C11 中定义为 _Atomic int 的类型定义(请参阅 here)。
  • std::atomic_int 在 C++11 中定义为 _Atomic int 的类型定义(请参阅 here );在 MS 上您可能有 some problems
  • atomic_int 除了上述之外(我认为)也是 MS 的事情
  • atomic_t 由 Linux 内核定义(参见 herehere )
  • sig_atomic_t 由 GNU C 库和其他库定义(请参阅 here)

关于c - 如果我创建一个原子变量,线程之间对该变量的所有操作都是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109053/

相关文章:

c - 一次读取文件而不是逐行读取文件(在 c 中)

c - 有没有办法自动释放所有内存而不是执行大量的 free() 函数?

ruby-on-rails - 在Rails应用程序中记录内部线程

c++ - 使用 Win32 线程模型时,MinGW-w64 是否支持开箱即用的 std::thread?

c - C编译错误中的队列实现

c - 动态规划磁贴

c - 查找已知的整数键集

java - join(long millis) 在以下示例中如何工作?

ruby - 如何计算ruby服务器中正在运行的线程

java - ThreadPoolExecutor 与 ForkJoinPool : stealing subtasks