Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果我创建了一个原子变量,那么线程之间对该变量的所有操作都是原子的吗?_C_Multithreading - Fatal编程技术网

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

C 如果我创建了一个原子变量,那么线程之间对该变量的所有操作都是原子的吗?,c,multithreading,C,Multithreading,这个代码能正常工作吗? 原子int和原子int有什么区别 是的,它将正常工作,即|=操作将是原子操作 就事物的定义而言(这超出了您的要求): 原子的由C11定义(参见) 原子int在C11中定义为原子int的类型定义(请参阅) std::atomic_int在C++11中定义为\u atomic int的类型定义(请参阅);在MS上,你可能有 atomic\u int上述之外的东西(我认为)也是微软的东西 原子\u t由linux内核定义(请参阅和) sig_atomic_t由GNU C库和其

这个代码能正常工作吗? 原子int和原子int有什么区别


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

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

  • 原子的由C11定义(参见)
  • 原子int
    在C11中定义为
    原子int
    的类型定义(请参阅)
  • std::atomic_int
    在C++11中定义为
    \u atomic int
    的类型定义(请参阅);在MS上,你可能有
  • atomic\u int
    上述之外的东西(我认为)也是微软的东西
  • 原子\u t
    由linux内核定义(请参阅和)
  • sig_atomic_t
    由GNU C库和其他库定义(请参阅)

As,
atomic\u int
\u atomic int
的类型定义。至于“正常工作”,如果你这样问,它不会崩溃。具体点。我必须使用atomic_load和friends来存储线程安全吗?是和否。
atomic
变量保证线程安全。然而,有很多替代方法可以实现这一点,例如互斥和信号量。Win32 API在操作系统级别上也有一些原子操作。此外,在实践中,在任何现代系统中,涉及正常
volatile int
的操作都是原子操作,只是不能“保证”(因此,依赖于它是错误的做法)。
  struct a {
    int xyz;
    volatile _Atomic(unsigned int) status;
    int eee;
    };

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


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