使用 golang 原子 LoadInt32/StoreInt32 (64)

2023-11-26

任何人都可以展示需要使用此类原子操作的示例吗?我不明白之间的区别

import "sync/atomic"

...
var sharedA int64
var sharedB *int64
...
// concurent code
tmpVarA := sharedA
tmpVarB := *sharedB
// and
tmpVarA := atomic.LoadInt64(&sharedA)
tmpVarB := atomic.LoadInt64(sharedB)

它根本没有记录在包中,但通常原子加载和正常值的存储不是为了原子性,因为 CPU 操作已经是原子性的,而是为了排序。如果您使用原子操作,语言规范或 CPU 指令文档会为您提供有关一个 CPU 存储将被另一个 CPU 查看的顺序的某些保证。如果您不使用正确的(昂贵的)指令,大多数现代 CPU 都没有这样的保证。

因此,在您的示例中(我假设,因为该包没有记录),如果共享变量首先由 goroutine 写入sharedA, then sharedB,在没有原子操作的情况下阅读 then 时,您可能会看到更改后的值sharedB仍然是旧值sharedA。如果存储或加载需要执行额外的魔法才能获得正确的排序,那么在不同的 CPU 系列上情况会有所不同,因此通常语言会让您对存储和加载使用原子函数,然后编译器/库知道您实际的 CPU 需要什么。

当然,这个包没有记录任何这些,所以在实践中没有区别,因为我们不知道这个包实际上保证了什么。因此,对于所有实际目的来说,它都是无用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 golang 原子 LoadInt32/StoreInt32 (64) 的相关文章

  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • 使用 OpenTelemetry 统一不同服务的范围

    我刚刚开始使用 OpenTelemetry 并为此创建了两个 微 服务 Standard and GeoMap 最终用户将请求发送到Standard服务 该服务又将请求发送到GeoMap在将结果返回给最终用户之前获取信息 我使用 gRPC
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1
  • Golang中如何获得100%的代码覆盖率? [复制]

    这个问题在这里已经有答案了 我无法获得 100 的代码覆盖率 因为我无法在 Golang 中测试 Fatals 我发现了一些问答 包括this one https stackoverflow com questions 30688554 h
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 根据值匹配数组

    我使用以下代码来解析 yaml 并应得到输出为runners对象和函数build应更改数据结构并根据以下结构提供输出 type Exec struct NameVal string Executer string 这是我尝试过的 但我不知道
  • 为什么 Go 中的函数不能命名为“init”?

    所以 今天在编码时我发现创建一个名为init产生错误method init not found 但是当我将其重命名为startup一切都很好 init 这个词是为 Go 中的某些内部操作而保留的 还是我在这里遗漏了一些东西 是的 该功能in
  • 与 Reflect.StructTag.Get 不兼容

    我当时在 Google Cloud 中工作 一切都很好 但是当我在 PC 中克隆所有项目时 每个 JSON 结构中都有此消息 结构体字段标签bson edad json edad omitempty 与reflect StructTag G
  • 在 x86-64 多核机器上以 C++ Atomic 读取和写入 int

    我读了this https stackoverflow com questions 5002046 atomicity in c myth or reality 我的问题很相似但又有些不同 请注意 我知道 C 0x 不能保证这一点 但我特别
  • 尝试使用 pkg-config 但它不是注册命令

    好的 我已经在 Windows 8 下建立了整个 Go 开发环境 也使用了 MinGW 我正在使用LiteIde C Go bin go exe build C Users Alyx Go Hi pkg config cflags sdl
  • 如何在 Docker 容器中持久保存 go 1.11 模块?

    我正在将 Go 1 10 应用程序迁移到 Go 1 11 这还包括从dep https golang github io dep to mod https github com golang go wiki Modules用于管理依赖关系
  • golang中的Reader接口和Read方法

    我正在关注 golang 之旅 我被要求 实现一个 rot13Reader 它实现 io Reader 并从 io Reader 读取 通过将 ROT13 替换密码应用于所有字母字符来修改流 我首先将方法实现到 rot13Reader ty
  • 解组此 xml 时遇到问题

    尝试了解如何在 Go 中解组 XML 通读多个示例和 stackoverflow 问题 我想要的是一个包含系统上安装的所有补丁的切片 我什至无法解组补丁 没有错误 只是一个空切片 可能做的事情基本上是错误的 提前感谢您的任何建议
  • 如何退出执行延迟调用的 go 程序?

    我需要使用defer释放手动创建的分配C图书馆 但我还需要os Exit在某个时刻具有非 0 状态 棘手的部分是os Exit跳过任何延迟指令 package main import fmt import os func main defe
  • 在 Go 中传递任意函数作为参数

    我正在尝试扩展我对 Go 函数指针的了解 并且我有一个问题 在 Go 中将函数作为参数传递可以做什么 不可以做什么 假设我想写一个decorator 可以包装任何现有函数的函数 为简单起见 我们将其限制为仅接受一个参数并仅返回一个值的函数
  • Golang 使用 gomail.v2 实现多个收件人

    我通过 gomail v2 发送电子邮件的唯一方法是在 for 循环中对每封电子邮件使用 Send 函数 但我需要向其他电子邮件地址显示已发送相同的电子邮件 for recipient range os Args 3 mail SetAdd
  • 将参数传递给 http.HandlerFunc

    我正在使用 Go 的内置 http 服务器pat http github com bmizerany pat响应某些 URL mux Get products http HandlerFunc index func index w http

随机推荐

  • 如何异步调用 WebViewClient.shouldInterceptRequest

    我想创建一个 Intranet 应用程序 该应用程序将显示通常只能在我们的内部环境中访问的内容 例如http intranet ourfirm com 现在我们可以从外部访问此内容 例如https ourproxy com ourIntra
  • 如何从 Azure 应用服务设置 mailSettings - 应用程序设置

    电子邮件服务器的当前设置已签入版本控制
  • kotlin int 盒装身份

    在文档中我们有 请注意 数字装箱不会保留身份 但接下来的例子给出了不同的结果 val number1 127 val b1 Int number1 val b2 Int number1 print b1 b2 this prints tru
  • 如何使用express 4.x获取ip客户端

    我想获取客户端的 IP 我正在尝试使用 localhost 127 0 0 1 但我总是得到 1 我正在尝试使用 app enable trust proxy app set trust proxy loopback app get fun
  • 分支预测与分支目标预测

    我理解得对吗 if语句更依赖于分支预测 v表查找更依赖于分支目标预测 关于v表 没有 分支预测 只有目标预测 尝试了解 CPU 如何处理 v 表 分支预测是预测分支是否会出现taken 分支目标预测就是预测where分行要去 这两件事是独立
  • 如何在 MySQL 中执行 FULL OUTER JOIN?

    我想做一个完全外连接在 MySQL 中 这可能吗 是一个完全外连接MySQL 支持吗 你没有完全连接在 MySQL 中 但你可以确定效仿他们 求一个代码sample转录自这个堆栈溢出问题你有 有两个表 t1 t2 SELECT FROM t
  • 类似于iPhone上的短信应用程序的文本输入框

    我在尝试获取像短信应用程序中那样的输入框时遇到了麻烦 任何人都可以提供一些关于如何构建其中之一并使其看起来不错的指导吗 我需要一个形状与 UITextfield 类似的输入框 但在打字时会垂直拉伸 我假设我需要计算文本的宽度并在文本换行时垂
  • UIButton按下后弹出UIDatePicker

    如何在按下 UIButton 后使 UIDatePicker 弹出 动画 然后在选择日期后再次关闭 这是在 iPhone 上 canihazcode 是的先生 谢谢你帮我拖延时间 void changeDate UIDatePicker s
  • 由于上传亚马逊服务项目而出现 SSLException

    我将文件从 android 上传到 aws 服务 我这样配置 AwsMetadata awsMetadata resultData getParcelable Params CommandMessage EXTRA MESSAGE AWSC
  • 寻求有关 SICP 练习 1.5 的一些解释

    问题可以找到here 在书中 我发现对正常订单评估的描述是 另一种评估模型在需要操作数的值之前不会评估操作数 相反 它会首先用操作数表达式替换参数 直到获得仅涉及原始运算符的表达式 然后执行评估 我还发现了另一个简短的描述 充分扩展然后缩小
  • 如何在 cakephp 上实现 facebook 之类的通知?

    有人知道如何实现类似 facebook 的通知吗 这个想法是在选项卡上放置通知 与数据库中所做的更改并行 而不刷新站点 如果数据被添加到数据库中 站点应该对其做出反应 谢谢 干杯 Facebook 风格的通知是在 Web 应用程序中使用以下
  • jQuery 验证插件:如何将错误视为警告并允许表单提交?

    正如主题所示 我正在使用 bassistance de 验证插件 http docs jquery com Plugins Validation 即使存在验证错误 我也希望能够提交表单 基本上 我们只想使用该插件来警告用户潜在的问题 我知道
  • 用boto设置hadoop参数?

    我正在尝试在我的 Amazon Elastic MapReduce 作业上启用错误输入跳过 我正在遵循这里描述的美妙食谱 http devblog factual com practical hadoop streaming dealing
  • jQuery mobile 是与 PhoneGap 集成的最佳 UI 框架吗?或者我应该使用离子? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想使用 PhoneGap 启动企业应用程序 但不知道所有移动 UI 框架中哪一个最适合与该项目集成 我是 PhoneGap 的新手 如果您想在 jQuery Mobile 和 Ionic
  • 检查一个字符串中的单词是否在另一个字符串中的最快方法是什么?

    我有一串文字 让我们称呼他们吧bad bad foo bar baz 我可以将此字符串保留为空格分隔的字符串 或作为列表 bad bad split 如果我有另一个字符串 如下所示 str This is my first foo stri
  • 在 ASP.NET Web API 中序列化对象时出现循环引用错误

    我正在用 C 编写一个 Web API 项目 该项目使用实体框架从数据库中提取数据 将其序列化并将其发送到客户端 我的项目有 2 个类 Post 和 Comment 来自 Post 的外键 这些是我的课程 岗位课程 public parti
  • Pandas 无法读取在 PySpark 中创建的 parquet 文件

    我正在通过以下方式从 Spark DataFrame 编写镶木地板文件 df write parquet path myfile parquet mode overwrite compression gzip 这将创建一个包含多个文件的文件
  • 使用 Web Audio API 进行离线/非实时渲染

    问题 我正在开发一个 Web 应用程序 用户可以在其中对音频样本进行排序 并可以选择将效果应用到他们使用 Web Audio API 创建的音乐模式 这些模式存储为 JSON 数据 我想对每个模式服务器端的渲染音频进行一些分析 据我所知 这
  • IBM Websphere 的日志文件 (sysout.log) 的位置

    Websphere 应用程序服务器的日志文件 sysout log 在哪里创建 我正在使用Rational softwarearchitect WAS HOME profiles PROFILE NAME logs SERVER NAME
  • 使用 golang 原子 LoadInt32/StoreInt32 (64)

    任何人都可以展示需要使用此类原子操作的示例吗 我不明白之间的区别 import sync atomic var sharedA int64 var sharedB int64 concurent code tmpVarA sharedA t