Golang - 简述channel和mutex锁机制的原理异同与使用场景
Channel
原理:当channel能存放的元素数量为0时表示为阻塞型channel。当管道无数据时,需要从管道取数据的协程会被阻塞,不会向下执行。所以可以通过多个协程应用同一个channel,从而实现协程间的同步。
使用场景: 1. 需要协程通信时 2. 需要管道传输数据时。
Mutex
原理:互斥锁用来防止资源竞争,多个协程使用同一把排它锁时,原来是并发运行的话将变为线性运行。
排它锁针对任意操作都是排它的,没有读写区分。若一个goroutine获得锁,则其他goroutine会一直阻塞到他释放锁后才能获得锁。
使用场景: 解决协程并发时对同一资源的竞争问题。
Golang - 互斥锁和读写锁