Semaphore具有如下方法:
1)初始化
2)V操作,如果先前的计数值为负,就说明有等待的P操作的调用者。它会从等待队列中取出一个等待的调用者,唤醒它
3)P操作,如果新值已经为负,那么调用者会被阻塞并加入到等待队列中
Semaphore与Lock的主要区别如下:
1)Lock是二元关系,Semaphore可以是多元关系
2)Lock一般遵循谁申请,谁释放,而Semaphore不需要
Semaphore使用过程中常见的错误有:
1)请求了资源,但是忘记释放它
2)释放了从未请求的资源
3)长时间持有一个资源,即使不需要它
4)不持有一个资源,却直接使用它
此文章为2月Day18学习笔记,内容来源于极客时间《Go 并发编程实战课》