使用go channel实现一个简单的信号量
测试环境:mac
什么是信号量
信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。
信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。
介绍信号量的话,那么肯定不能不介绍P-V操作原语
P-V操作原语
P操作原语:
- semaphore 减1
- 若semaphore 大于等于0,线程继续执行.
- 若semaphore < 0 ,线程进入阻塞队列.
V操作原语:
- semaphore加1
- 若semaphore 大于 0, 线程继续执行
- 若semaphore 小于等于0,唤醒阻塞队例的线程
go简单实现
这里主要是实现互斥以及P-V操作原语
简单代码
package main
import (
"sync"
"fmt"
)
func main() {