c++ - 使用 c++ atomic 时写“y=++x”是否安全?
问题描述
如果我有 2 个线程并且在主函数中,我会像这样初始化一个变量 x
std::atomic<int> x=0;
,
在线程 1 中,我这样做:
while(true){
x++;
}
在线程 2 中,我这样做:
y=++x;
我的问题是:变量 y 有没有可能得到错误的数字?
我的意思是例如:
如果在thread2中,那一刻,x=2;那么因为“++x”,x=3,所以我希望y=3;
但是我怕在“++x”和“y=x”之间,线程1会再次重写x,所以我可能有y=4什么的。
解决方案
如果担心 in 的y=++x
值x
首先等于 2 ,然后增加到 3 ++x
,然后在复制到 之前再次增加另一个线程y
,那么答案是否定的 - 这不会发生。操作的结果++x
不是对原子值本身的引用 - 它是int
后增量的简单结果,并且操作保证您将在返回增量后准确地获得值(无需额外读取)。
推荐阅读
- reactjs - React 中的 useCallback 似乎不允许我更新父级中的状态
- python - 显示在文件python中创建的数字总数的程序
- c - 在c程序中打印单词的每个字符
- spring - 使用 StreamingResponseBody 通过 Spring Boot 流式传输数据的 Java 客户端
- sql - 在 BigQuery 中拆分字符串并转换为整数
- javascript - 时区之间的转换似乎仍然使用机器的时区
- typescript - 使用 Nuxt、Typescript、GraphQL 和刷新令牌进行用户身份验证
- css - 在 Font Awesome 图标周围添加圆形边框
- sqlite - 在sqlite中递归地将自己的列连接到父列
- python - 雪花连接器的光标执行中的单引号