如果我创建一个原子变量,那么线程之间的所有变量都是原子操作?

时间:2014-09-29 21:15:40

标签: 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;
    }

1 个答案:

答案 0 :(得分:2)

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

就事物的定义而言(这比你要求的要多):

  • _Atomic由C11定义(请参阅here
  • atomic_int在C11中定义为_Atomic int的typedef(请参阅here)。
  • std::atomic_int在C ++ 11中定义为_Atomic int的typedef(参见here);在MS上你可能有some problems
  • 以上
  • atomic_int(我认为)也是MS的事情
  • atomic_t由linux内核定义(请参阅herehere
  • sig_atomic_t由GNU C Library和其他人定义(参见here