package main
import (
"fmt"
"sync"
"time"
)
func main() {
//要监听的变量
bitcoinRising := false
//创建条件
cond := sync.NewCond(&sync.Mutex{})
go func() {
for {
/*加锁修改为涨,并通知投资者*/
cond.L.Lock()
bitcoinRising = true
cond.Broadcast()
cond.L.Unlock()
/*持续涨*/
time.Sleep(time.Second)
/*加锁修改为跌*/
cond.L.Lock()
bitcoinRising = false
cond.L.Unlock()
//持续一段时间
time.Sleep(3*time.Second)
}
}()
/*投资者协程*/
for true {
/*
加锁阅读比特币变化
知道比特币跌,就停止投资,等待涨的消息(释放锁)
*/
cond.L.Lock()
for bitcoinRising == false {
fmt.Println("停止投资比特币")
/*
阻塞等待消息
收到涨的消息,就继续向下执行(其他协程通过cond.Signal/Broadcast()发送涨跌消息)
*/
cond.Wait()//内部将释放锁
//收到了市场变化后继续执行
}
//走到这里说明bitcoinRising=true
fmt.Println("开始投资比特币")
cond.L.Unlock()
}
}