golang_条件变量:sync.Cond作为条件变量的使用

本文介绍了Golang中的sync.Cond条件变量在生产者消费者模型中的应用。详细阐述了sync.Cond结构体及其Wait、Signal和Broadcast方法,并提供了一个实际案例,展示如何在缓存限制为3的channel中,通过条件变量协调5个生产者和消费者的交互。
摘要由CSDN通过智能技术生成

场景:

生产者消费者模型中(比如一个有缓存的channel中),生产者进行生产之前去抢锁,如果缓存已满,生产者抢锁无效;消费者进行消费之前去抢锁,如果缓存为空,消费者抢锁无效。所有在抢锁之前需要进行一个判断,称之为条件变量。

sync.Cond的结构:

type Cond struct {
   
	noCopy noCopy

	// L is held while observing or changing the condition
	L Locker

	notify  notifyList
	checker copyChecker
}

其中有一把锁。

sync.Cond结构体实现的方法:

Wait() // 阻塞-加锁-解锁
Wait()一旦阻塞后,就需要唤醒才能进行抢锁,即需要Signal()或Broadcast()进行唤醒。

func (c *Cond) Wait() {
   
	c.checker.check()
	t := runtime_notifyListAdd(&c.notify)
	c.L.Unlock()
	runtime_notifyListWait(&c.notify, t)
	c.L.Lock()
}

Signal() // 唤醒一个goroutine

func 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值