golang中的同步对象

线程模型与调度

golang中的线程调度是半协同式调度,只有有阻塞的时候,才会进行goroutine的切换,独立于OS的线程调度。

mutex

通过sync.Mutex访问,具有Lock()与Unlock()方法。与一般的锁对象对应起来。

WaitGroup

sync.WaitGroup用于等待多个对象。

wg.Add()用于指定等待多少个对象;
wg.Done()用于宣告对象就位;
wg.Wait()用于等待;

轻量级的原子操作atomic

  • atomic提供一些原子量的操作。
  • sync.Once.Do()提供了只做一次的操作。
  • atomic.Value通过Store和Load实现了原子的读写,由于atomic.Value实际上是interface{},所以能够保存任何的数据。就是类似于C语言中的void*的原子读写操作吧。

顺序一致性模型

顺序一致性模型只有有同一个go routine中才是有保证的,routine之间的顺序一致性无法得到保证。

你可能感兴趣的:(golang中的同步对象)