首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >atomic_init在C中并不是线程安全的,那么为什么它存在呢?

atomic_init在C中并不是线程安全的,那么为什么它存在呢?
EN

Stack Overflow用户
提问于 2022-03-23 22:56:34
回答 1查看 216关注 0票数 3

C17标准7.17.2.2节对<stdatomic.h>中定义的void atomic_init(volatile A *obj, C value)作了如下说明

虽然这个函数初始化一个原子对象,但它并不能避免数据竞争;并发访问被初始化的变量,即使是通过原子操作,也构成了一个数据竞争。

既然拥有原子对象和原子操作的全部目的是避免数据竞争,那么为什么存在atomic_init函数呢?例如,为什么不做下面的工作呢?

代码语言:javascript
复制
_Atomic int x = 7; 

而不是:

代码语言:javascript
复制
_Atomic int x; 
atomic_init(&x, 7);

另外,当它实际上是一个任务时,为什么它被称为atomic_init呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-23 23:43:47

Atomic值可能有用于实现所需语义的隐藏字段,这些字段需要以某种方式进行初始化。这可以使用C变量初始化程序或使用atomic_init来实现。

对于静态变量或自动变量,提供两个选项:

代码语言:javascript
复制
_Atomic int x = 7;
代码语言:javascript
复制
_Atomic int x; 
atomic_init( &x, 7 );

但这只为动态分配的变量留下了一个选项。

代码语言:javascript
复制
_Atomic int *p = malloc( sizeof( _Atomic int ) );
atomic_init( p, 7 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71595059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档