首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >静态局部变量会被错误地优化吗?

静态局部变量会被错误地优化吗?
EN

Stack Overflow用户
提问于 2017-07-12 01:08:44
回答 1查看 220关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::uint64_t foo()
{
    static std::uint64_t var = 0u;

    std::lock_guard<std::mutex> lock(mutex);

    std::uint64_t b;

    do
    {
        b = bar();
    }
    while (b <= var);

    var = b;

    return b;
}

假设我们有两个线程。让第一个线程在调用lock()之前将变量var读入寄存器,第二个线程在调用lock()之前将变量var读入寄存器。然后,第一个线程更改var,但是第二个线程不会看到更改,因为它将值保存在寄存器中。这种情况真的会发生吗?

我的意思是,通常只有局部变量是这样优化的:它们被放到寄存器中,然后从那里读取,而不是从主内存中读取。正如我所理解的,不应该以这种方式优化全局变量。但是静态局部变量呢?

EN

回答 1

Stack Overflow用户

发布于 2017-07-12 01:26:53

静态局部变量具有全局变量的生存期,它只有一个函数范围。您必须以使用适当的全局变量(互斥/原子)的方式保护它。

注:--如果在多个线程中使用任何类型的变量(我指的是当线程使用相同的变量时),则必须使其线程安全。即使它是一个全局变量。即使变量存储在内存中。将变量存储在内存中并不会使其线程安全。线程安全不是因为某些变量可能在寄存器中而引起的关注。可能有一个CPU,不同的内核不会自动同步它们的缓存。因此,对于一个变量,每个核心的缓存中可能有多个值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45053275

复制
相关文章
Swift 日历添加事件 删除事件
import EventKit /** Privacy - Calendars Usage Description 添加日历权限 info.list 配置权限 */ /// 日历添加事件 class KKAddEventClasse: NSObject { /// 添加成功回调 typealias SuccessAddEvent = ((_ identifier: String) -> Void) /// 添加失败回调 typealias ErrorAddEvent =
菜菜不吃蔡
2021/03/20
4.1K1
Python日历模块总结
calendar模块的函数都是日历相关的,提供了对日期的一些操作方法,和生成日历的方法.
py3study
2020/01/06
1.4K0
使用eventBus事件的重复触发事件问题的解决
在单页应用中,在 A 页面中触发事件,然后在 B 页面中对这个事件进行响应是一个很常见的需求,那么当有这种需求的时候要怎么实现呢。有两种方案可以实现:
用户2305169
2018/07/24
3.7K0
Android向系统日历添加日程事件
在项目开发过程中,有时会有预约提醒、定时提醒等需求,这时我们可以使用系统日历来辅助提醒。通过向系统日历中写入事件、设置提醒方式(闹钟),实现到达某个特定的时间自动提醒的功能。这样做的好处是由于提醒功能是交付给系统日历来做,不会出现应用被杀情况,能够做到准时提醒。 一般来说实现向系统日历中读写事件一般有以下几个步骤: (1)需要有读写日历权限; (2)如果没有日历账户需要先创建账户; (3)实现日历事件增删改查、提醒功能;
developerHaoz
2022/05/13
3.2K0
日历视图使用
CalendarView是安卓自带的一个日历控件, 可以使用其开发手机日历的相关功能.
李小白是一只喵
2020/04/24
2.6K0
小程序如何避免多次点击,重复触发事件
作为前端开发,我们经常会遇到的场景,比如用户点击获取验证码按钮时,没有反应,大部分用户都会接着点击,这就会造成用户收到多条验证码,这是因为后台api请求比较慢,而客户端体验又做得不到位,导致用户以为没点击到或者是页面假死,在上次请求还没处理完,就再次点击按钮。这对于我们开发来说,这是bug。
honey缘木鱼
2018/09/26
6.3K0
Python calendar日历模块的常用方法
如果您想知道某一天是星期几,某个月有多少个周末...那么,日历对您来说非常方便。您的办公桌有制作精美的日历,手机里也有日历,电脑里也有日历,随手可得。
Python碎片公众号
2021/02/26
7970
Python calendar日历模块的常用方法
jquery 使用 unbind 解决重复绑定执行事件
在jquery监听click事件的时候会出现点击一次没有重复,点击第二次就重复的情况。出现这个问题的原因是之前的click事件被绑定后,并没有解绑。
Devops海洋的渔夫
2019/08/02
1.6K0
使用延迟的FileSystemWatcher来避免重复触发事件
  程序里需要监视某个目录下的文件变化情况: 一旦目录中出现新文件或者旧的文件被覆盖,程序需要读取文件内容并进行处理;但在实际处理中发现当一个文件产生变化时,Change事件被反复触发了好几次。这样可能的结果是造成同一文件的重复处理。 解决方法:
跟着阿笨一起玩NET
2018/09/19
2K0
Android-日历CalendarView使用
2.在主活动中 通过设置setOnDataChangeListener() 来为其添加监听事件
圆号本昊
2021/09/24
1.9K0
Android-日历CalendarView使用
事件总线指的是什么?事件总线如何使用?
比较常见的组件通信方式有父子组件通信和兄弟组件通信,两个组件是有着引入和被引入关系。如果两者之间没有任何引入关系,就可以使用事件总线来达到通信的目的。到底事件总线指的是什么?我们将在下文做一个介绍。
用户8715145
2022/03/18
1.1K0
Python模块知识2:时间日期日历模块Time、Datetime、Calendar
1、time模块 时间为什么从1970年开始:因为Linux系统那一年开始使用;通常由以下几种方式表示时间: 时间戳:1970年1月1日之后的秒,即:time.time()可以获得当前时间戳。 格式化的字符串:2014-11-11 11:11,如:time.strftime('%Y-%m-%d'),详见案例 结构化时间,为元组形式,包含了9个元素:年、日、星期等... 如:time.struct_time(tm_year=2017, tm_mon=5, tm_mday=27, tm_hour=15, tm_
企鹅号小编
2018/01/11
1.6K0
Python模块知识2:时间日期日历模块Time、Datetime、Calendar
日历表的使用
同第一个阶段一样,特别附加一个小章节的目的是想把没有完善的且重要的知识补全。本节有三个知识点,日历表排序,在PowerQuery中创建日历表,定制日历表的使用。
公众号PowerBI大师
2019/08/07
2.2K0
日历表的使用
事件总线的原理是什么?事件总线如何使用?
我们都知道在vue组件中有很多通信方式,例如我们都熟知和常见的父子组件通信和兄弟组件通信。在其中还有一种功能非常强大的通信方式,可以做到跨组件通信,那就是事件总线。事件总线的原理是什么呢?下文将会有一个详细的介绍,请阅读下文。
用户8715145
2022/03/18
1.2K0
vue如何使用中央事件总线?事件总线是什么?
中央事件总线的运用在我们的工作中应该非常常见了,如果两个组件的关系不是父子组件,并且两者之间需要进行通信,那么一般就会使用中央事件总线。那么,vue如何使用中央事件总线?我们将在下文做一个简单介绍,希望可以帮助大家解决这一问题。
用户8715145
2022/03/07
8800
spreadTrading模块事件触发机制
本文主要介绍了价差交易模块的事件触发机制。感谢‘次第花开’和‘用户名呀’在维恩的派论坛里的分享!
用Python的交易员
2018/07/26
2.5K0
spreadTrading模块事件触发机制
Backbone事件模块及其用法
事件模块Backbone.Events在Backbone中占有十分重要的位置,其他模块Model,Collection,View所有事件模块都依赖它。通过继承Events的方法来实现事件的管理,可以说,它是Backbone的核心组成部分。 此外,事件模块的所有方法都挂在了全局的Backbone上,如果你的代码中需要用到自定义事件(实现观察者模式),可以直接使用它。 一、Events API 1.0之前只提供了三个基本方法 on/once/off/trigger,1.0开始增加了几个实用方法 listenTo
晚晴幽草轩轩主
2018/03/27
2.5K0
nginx事件模块源码分析
事件处理框架所要解决的问题是如何收集,管理,分发事件。这里所说的事件,主要以网络事件和定时器事件为主,而网络事件中又以TCP网络事件为主。由于网络事件与网卡中断处理程序,内核提供的系统调用密切相关,所以网络事件的驱动取决于不同的操作系统平台,在同一操作系统中也受制于不同的操作系统内核版本。因此不同操作系统有不同的事件驱动机制。
stan1ey
2021/08/11
6880
nginx事件模块源码分析
【说站】mysql模块如何使用
1、在使用之前,创建一个名为demo的数据库,同时定义一个名为demo_tabel的表操作log。
很酷的站长
2022/11/23
7230
【说站】mysql模块如何使用
Go如何使用私有仓库模块
今天我来讲一讲在 golang 中如何在项目中引用私有仓库吧,在我们的实际生产开发中,往往需要在项目中引用内部代码管理平台上的仓库代码,接下来我来介绍如何在 golang 中使用私有仓库模块。
美团骑手
2022/04/26
3.7K0

相似问题

如何使用日历模块在Drupal 7中的日历中单击事件片段

10

如何用日历模块显示本月即将发生的事件?

20

如何创建事件日历?

20

日历模块

10

如何还原日历模块创建的日历视图?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文