使用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() {
wg := sync.WaitGroup{}
wg.Add(3)
sem := <

本文介绍了如何使用Go语言的channel实现一个简单的信号量,用于保护共享资源的互斥访问。文中详细讲解了信号量的概念,并阐述了P-V操作原语的工作原理,通过示例代码展示了在Go中如何实现这些操作。
最低0.47元/天 解锁文章
486

被折叠的 条评论
为什么被折叠?



