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() } }