zoukankan      html  css  js  c++  java
  • Go语言协程并发---条件变量案例《城管来啦》

    package main
    
    import (
    	"fmt"
    	"sync"
    	"time"
    )
    
    /*
    城管预警
    ·监听城管大队
    ·烧烤摊集群:监听城管大队,只要出动就发消息通知工会主席并进入阻塞等待至被唤醒,否则就提供露天烧烤
    ·公关专员:摆平城管大队,并广播通知所有烧烤摊主
    */
    
    func main() {
    	var dangerous = false
    	cond := sync.NewCond(&sync.Mutex{})
    	chDanger := make(chan string, 1)
    
    	for i := 1; i <= 3; i++ {
    		go func(index int) {
    			for true {
    				//只要城管出来,就等待起来
    				cond.L.Lock()
    				for dangerous==true{
    					//发送预警
    					select {
    					case chDanger <- "城管来了!!":
    						fmt.Println("城管来了!")
    						fmt.Println(index,":蛰伏状态")
    					default:
    						//已经有人发过了
    					}
    
    					cond.Wait()
    				}
    				cond.L.Unlock()
    
    
    				//城管没出来
    				fmt.Println(index,":提供露天烧烤")
    				time.Sleep(3*time.Second)
    			}
    
    		}(i)
    	}
    
    	go func() {
    		for true {
    			select {
    			case <-chDanger:
    				//帮大家平事儿
    				cond.L.Lock()
    				time.Sleep(3*time.Second)
    				dangerous=false
    				fmt.Println("事情已经摆平")
    				cond.Broadcast()
    				cond.L.Unlock()
    			default:
    				//日常生活
    				fmt.Println("工会主席的日常幸福生活")
    				dangerous=true
    				time.Sleep(3*time.Second)
    			}
    		}
    	}()
    
    	time.Sleep(365*time.Second)
    }
    

      

  • 相关阅读:
    Lotus Sametime Server R8.x 标准版部署排错
    group by的测试
    了解lpk.dll是什么病毒以及lpk.dll病毒专杀方法
    jquery练习5
    win7中配置iis
    jquery的动画
    lamp下mysql安全加固
    jquery的冒泡事件
    MySQL性能优化的最佳20+条经验
    MySQL数据库服务器优化详细
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12776505.html
Copyright © 2011-2022 走看看