当前位置: 首页 > news >正文

在Go语言中复制sync类型

        sync包提供了基本的同步原语,例如互斥锁、条件变量和等待组。对于所有这些类型,有一个硬性规则要遵循:它们永远不应该被复制。让我们来理解下这个原理和可能发生的问题。

        我们将创建一个线程安全的数据结构来存储计数器。它将包含一个map[string]int,表示每个计数器的当前值。我们还将用sync.Mutex,因为必须保护访问。我们添加一个Increment方法来增加给定的计数器名称:

type Counter struct {mu       sync.Mutexcounters map[string]int
}func NewCounter() Counter {return Counter{counters: map[string]int{}}
}func (c Counter) Increment(name string) {c.mu.Lock()defer c.mu.Unlock()c.counters[name]++
}

增量逻辑在临界区完成:在c.mu.Lock( )和c.mu.Unlock()之间。尝试一下我们的方法,使用-race选项运行以下示例,该示例启动两个 goroutine 并增加它们各自的计数器:

counter := NewCounter()go func() {counter.Increment("foo")
}()
go func() {counter.Increment("bar")
}()

运行这个程序,它会引发数据竞争:

====
http://www.lryc.cn/news/338354.html

相关文章:

  • Golang | Leetcode Golang题解之第25题K个一组翻转链表
  • 【初学】前后端flask+vue组合GET案例
  • 计算机科学与技术CS考研408资料
  • ACID模型是什么
  • 【Linux】基础IO----理解缓冲区
  • java学习之路-继承
  • Linux系统——Elasticsearch企业级日志分析系统
  • 多协议接入视频汇聚EasyCVR平台vs.RTSP安防视频EasyNVR平台:设备分组的区别
  • Spring Security Oauth2 之 理解OAuth 2.0授权流程
  • mysql题目4
  • GFS部署实验
  • 最前沿・量子退火建模方法(1) : subQUBO讲解和python实现
  • 如何在Linux部署MeterSphere并实现公网访问进行远程测试工作
  • postgis导入shp数据时“dbf file (.dbf) can not be opened.“
  • StarUML笔记之从C++代码生成UML图
  • sizeof()和strlen
  • Python学习笔记13 - 元组
  • [leetcode]remove-duplicates-from-sorted-list-ii
  • 共享内存和Pytorch中的Dataloader结合
  • 分享 WebStorm 2024 激活的方案,支持JetBrains全家桶
  • Android OOM问题定位、内存优化
  • 棋盘(c++题解)
  • 滑动窗口例题
  • 智过网:注册安全工程师注册有效期与周期解析
  • 腐蚀Rust 服务端搭建架设个人社区服务器Windows教程
  • 蓝桥杯备赛:考前注意事项
  • 111111111111
  • uniapp 卡片勾选
  • 乐趣Python——文件与数据:挥别乱糟糟的桌面
  • docker nginx-lua发送post json 请求