Go的sync(一)
概述
如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题.
sync六个基本的函数Once WaitGroup cond mutex rwmutex pool
总述
waitgroup
给协程标注 让程序不因为协程出现panic 一个sync总体的控制函数
once
用once可以保证上面的onc.Do()被执行一次 执行一次之后其他的协程就不会执行了
cond
cond其实就是哪个控制协程执行的包函数:让哪个执行,让全部执行,给函数标注,让函数等待执行、 加锁等
Signal是执行一个协程的信号
Broadcast是执行全部协程的信号
wait 协程等待通知,阻塞在此
NewCond创建条件
cond.L.Lock() 给协程加锁
cond.L.Unlock() //释放锁
pool
pool就是一个类似中间件的 存放东西的
put放入
get取出
New为走默认值
RWMUX
RWMUX是控制多个协程对于资源的使用顺序的
RLOCK RULOCK
LOCK ULOCK
在一个协程里面
对资源的
读锁的时候别的协程也可以读,但是不可以写
写锁的时候别的协程不可以操作,不可以读也不可以写
Mutex
多个协程会操作一个特定资源,就会出现意想不到的错误,所以我们使用互斥锁,
一个协程使用特定资源的时候进行锁定,用完解锁,
再让其他协程使用,所以其他协程想使用此资源,必须自己给资源解锁或等待正在使用的协程解锁
在代码中就是锁定一段代码,代码里面有资源
函数
type Condfunc NewCond(l Locker) *Condfunc (c *Cond) Broadcast()func (c *Cond) Signal()func (c *Cond) Wait()
type Locker
type Mutexfunc (m *Mutex) Lock()func (m *Mutex) Unlock()
type Oncefunc (o *Once) Do(f func())
type Poolfunc (p *Pool) Get() interface{}func (p *Pool) Put(x interface{})
type RWMutexfunc (rw *RWMutex) Lock()func (rw *RWMutex) RLock()func (rw *RWMutex) RLocker() Lockerfunc (rw *RWMutex) RUnlock()func (rw *RWMutex) Unlock()
type WaitGroupfunc (wg *WaitGroup) Add(delta int)func (wg *WaitGroup) Done()func (wg *WaitGroup) Wait()
Go的sync(一)相关推荐
- Go 学习笔记(67)— Go 并发安全字典 sync.Map
1. 并发不安全的 map Go 语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的. 换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是 ...
- Go 学习笔记(66)— Go 并发同步原语(sync.Mutex、sync.RWMutex、sync.Once)
1. 竞态条件 一旦数据被多个线程共享,那么就很可能会产生争用和冲突的情况.这种情况也被称为竞态条件(race condition),这往往会破坏共享数据的一致性. 举个例子,同时有多个线程连续向同一 ...
- Error: Gradle project sync failed. Please fix your project and try again.
下载一个demo 显示是这样的 这样问题的处理方法 1 首先检查下gradle 是否下载了 如果出现下面文字提示是没有下载了,可能是网络的问题引起的问题 Gradle sync failed: Co ...
- Go 学习笔记(23)— 并发(02)[竞争,锁资源,原子函数sync/atomic、互斥锁sync.Mutex]
本文参考 <Go 语言实战> 1. 竞争状态简述 如果两个或者多个 goroutine 在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争的状态,这种情况 ...
- linux系统安装deamonsync,DAEMON Sync的使用心得体会。简易版家庭云服务器!正是我要的那种...
作为一个超级菜鸟,今天学会了自己建立一个简易的局域网云盘,以后就可以让家里人同步照片进电脑了!我的需求仅仅如此而已! (1)保证所有设备在同一局域网内.(我现在的理解就是在同一个路由器内,不知道是不是 ...
- android jar 电子书下载,【Android】Gradle project sync jar包长时间下载不下来的解决办法...
当我们新建一个Android项目,或者在项目中依赖使用一个新的第三方库时,Android Studio经常会从jcenter或者maven仓库下载jar包,但是我们的网络环境不一定一直那么的顺畅,当网 ...
- 对于sync.Mutex使用注意事项
1.sync.Mutex的初始化注意事项 type MemProvider struct { lock *sync.Mutex //用来锁 sessions map[ ...
- golang的临时对象池sync.Pool
今天在写码之时,发现了同事用到了sync.pool.因不知其因,遂Google之.虽然大概知道其原因和用法.还不能融汇贯通.故写此记,方便日后查阅.直至明了. 正文 在高并发或者大量的数据请求的场景中 ...
- Go中协程间通信的方式Sync.Cond
在Go中协程间通信的方式有多种,最常用的是channel.如果牵扯多个协程的通知,可以使用sync.Cond. 1. 程序中的通信方式 GO语言中有句名言:"不要用共享内存来通信,而是使用通 ...
- linux刷新磁盘的命令,sync命令 – 刷新文件系统缓冲区
sync命令用于强制被改变的内容立刻写入磁盘,更新信息速度非常快, 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率. syn ...
最新文章
- 某程序员大佬北漂16年,从住地下室到身家千万,如今回老家躺平!
- 空间统计笔记之一(基础知识)
- JavaScript的函数
- Interface 的本质用处
- 使Docker搭建Java Web运行环境
- Drbd+Pacemaker实现高可用
- 微型计算机技术6,微型计算机技术课后习题6-8章答案.ppt
- 2025 年全球数据量高达175ZB,开发者如何挑战数据洪流?
- C++标识符的命名规则
- 很多男孩不知道:她喜欢你
- messageBox的样式修改
- matlab2016b安装
- 如何在Word中绘制流程图
- 第四章: 元语言抽象
- kotlin expecting a top leveleclaration
- 小升初随感--年年小升初,一段辛酸史
- 解析torrent种子信息
- Android 8.1 第三方apk通过数据库调用系统定时开关机功能
- 五月该种下一株康乃馨
- .NET 技术FAQ
热门文章
- MapReduce多个job同时使用的方式(从网上找到的案例,原始博文:http://www.cnblogs.com/yjmyzz/p/4540469.html)
- Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用
- linux下重启weblogic(关闭和启动)
- 07_NoSQL数据库之Redis数据库:Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
- 01_数据库连接池,数据源,ResultSetMetaData,jdbc优化
- 函数包装器,函数私有类处理
- JNI方面的笔记(未完待续)
- python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程
- [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
- Spring Boot Admin 2 值得了解的新变化