Go的sync(一)

概述

如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题.

sync六个基本的函数Once  WaitGroup  cond   mutex  rwmutex  pool  

Go的sync(一)_第1张图片

总述

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 Cond
    func NewCond(l Locker) *Cond
    func (c *Cond) Broadcast()
    func (c *Cond) Signal()
    func (c *Cond) Wait()
type Locker
type Mutex
    func (m *Mutex) Lock()
    func (m *Mutex) Unlock()
type Once
    func (o *Once) Do(f func())
type Pool
    func (p *Pool) Get() interface{}
    func (p *Pool) Put(x interface{})
type RWMutex
    func (rw *RWMutex) Lock()
    func (rw *RWMutex) RLock()
    func (rw *RWMutex) RLocker() Locker
    func (rw *RWMutex) RUnlock()
    func (rw *RWMutex) Unlock()
type WaitGroup
    func (wg *WaitGroup) Add(delta int)
    func (wg *WaitGroup) Done()
    func (wg *WaitGroup) Wait()

你可能感兴趣的:(Go)