概述

如何处理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(一)相关推荐

  1. Go 学习笔记(67)— Go 并发安全字典 sync.Map

    1. 并发不安全的 map Go 语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的. 换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是 ...

  2. Go 学习笔记(66)— Go 并发同步原语(sync.Mutex、sync.RWMutex、sync.Once)

    1. 竞态条件 一旦数据被多个线程共享,那么就很可能会产生争用和冲突的情况.这种情况也被称为竞态条件(race condition),这往往会破坏共享数据的一致性. 举个例子,同时有多个线程连续向同一 ...

  3. Error: Gradle project sync failed. Please fix your project and try again.

    下载一个demo  显示是这样的 这样问题的处理方法 1 首先检查下gradle 是否下载了 如果出现下面文字提示是没有下载了,可能是网络的问题引起的问题 Gradle sync failed: Co ...

  4. Go 学习笔记(23)— 并发(02)[竞争,锁资源,原子函数sync/atomic、互斥锁sync.Mutex]

    本文参考 <Go 语言实战> 1. 竞争状态简述 如果两个或者多个 goroutine 在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争的状态,这种情况 ...

  5. linux系统安装deamonsync,DAEMON Sync的使用心得体会。简易版家庭云服务器!正是我要的那种...

    作为一个超级菜鸟,今天学会了自己建立一个简易的局域网云盘,以后就可以让家里人同步照片进电脑了!我的需求仅仅如此而已! (1)保证所有设备在同一局域网内.(我现在的理解就是在同一个路由器内,不知道是不是 ...

  6. android jar 电子书下载,【Android】Gradle project sync jar包长时间下载不下来的解决办法...

    当我们新建一个Android项目,或者在项目中依赖使用一个新的第三方库时,Android Studio经常会从jcenter或者maven仓库下载jar包,但是我们的网络环境不一定一直那么的顺畅,当网 ...

  7. 对于sync.Mutex使用注意事项

    1.sync.Mutex的初始化注意事项 type MemProvider struct { lock     *sync.Mutex              //用来锁 sessions map[ ...

  8. golang的临时对象池sync.Pool

    今天在写码之时,发现了同事用到了sync.pool.因不知其因,遂Google之.虽然大概知道其原因和用法.还不能融汇贯通.故写此记,方便日后查阅.直至明了. 正文 在高并发或者大量的数据请求的场景中 ...

  9. Go中协程间通信的方式Sync.Cond

    在Go中协程间通信的方式有多种,最常用的是channel.如果牵扯多个协程的通知,可以使用sync.Cond. 1. 程序中的通信方式 GO语言中有句名言:"不要用共享内存来通信,而是使用通 ...

  10. linux刷新磁盘的命令,sync命令 – 刷新文件系统缓冲区

    sync命令用于强制被改变的内容立刻写入磁盘,更新信息速度非常快, 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率. syn ...

最新文章

  1. 某程序员大佬北漂16年,从住地下室到身家千万,如今回老家躺平!
  2. 空间统计笔记之一(基础知识)
  3. JavaScript的函数
  4. Interface 的本质用处
  5. 使Docker搭建Java Web运行环境
  6. Drbd+Pacemaker实现高可用
  7. 微型计算机技术6,微型计算机技术课后习题6-8章答案.ppt
  8. 2025 年全球数据量高达175ZB,开发者如何挑战数据洪流?
  9. C++标识符的命名规则
  10. 很多男孩不知道:她喜欢你
  11. messageBox的样式修改
  12. matlab2016b安装
  13. 如何在Word中绘制流程图
  14. 第四章: 元语言抽象
  15. kotlin expecting a top leveleclaration
  16. 小升初随感--年年小升初,一段辛酸史
  17. 解析torrent种子信息
  18. Android 8.1 第三方apk通过数据库调用系统定时开关机功能
  19. 五月该种下一株康乃馨
  20. .NET 技术FAQ

热门文章

  1. MapReduce多个job同时使用的方式(从网上找到的案例,原始博文:http://www.cnblogs.com/yjmyzz/p/4540469.html)
  2. Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用
  3. linux下重启weblogic(关闭和启动)
  4. 07_NoSQL数据库之Redis数据库:Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
  5. 01_数据库连接池,数据源,ResultSetMetaData,jdbc优化
  6. 函数包装器,函数私有类处理
  7. JNI方面的笔记(未完待续)
  8. python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程
  9. [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
  10. Spring Boot Admin 2 值得了解的新变化