概要 今天我们来看看Go中的互斥锁 sync/mutex。本文基于go1.15.5 进行分析。 我们借用互斥锁在维基百科上的定义:互斥锁(英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行访问的代码,并非一种机制或是算法。一个程序、进程、线程可以拥有多个临界区域,但是并不一定会应用互斥锁。 在Go中我们无法直接操作线程,使用 go 关键字启动的是goroutine,但goroutine的背后还是操作系统的线程,所以在此我们讨论的 …
阅读更多今天我们来聊聊go的atomic pkg,atomic是go并发编程中最为基础的库。如果说它是go并发编程的基石一点也不为过,像标准库中大家使用率非常高的Mutex, RWMutex,WaitGroup,Once等的实现都依赖于atomic。 Atomic简介 atomic提供一系列用于实现同步功能的、底层的,原子的方法: AddT 系列将增量增加到源值上,并返回新值。 CompareAndSwapT 系列比较两个变量的值,并进行交换。 SwapT系列交换值,并返回旧值。 LoadT 系列获取值。 StoreT 系列更新值。 Value 存储器,支持Load,Store。 这些方法是原子操作,不会被CPU中断,也就说在多 …
阅读更多