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