sync.Cond代表条件变量,需要配置锁才能有用

package main

import (
"fmt"
"runtime"
"sync"
"time"
) func main() { runtime.GOMAXPROCS(4) testCond()
} func testCond() { c := sync.NewCond(&sync.Mutex{})
condition := false go func() {
time.Sleep(time.Second * 1)
c.L.Lock() //3 获得锁
fmt.Println("[1] 变更condition状态,并发出变更通知.")
condition = true
c.Signal() //c.Broadcast() //4 唤醒阻塞的main程,但是由于锁还没有释放,main抢不到锁会继续向下执行
time.Sleep(1 * time.Second)
fmt.Println("[1] 继续后续处理.")
c.L.Unlock() //5 释放锁,main抢到锁,接着执行 }() c.L.Lock() //1 先获得锁
fmt.Println("[2] condition..........1")
for !condition {
fmt.Println("[2] condition..........2")
//等待Cond消息通知
c.Wait() //2 阻塞main,释放锁
fmt.Println("[2] condition..........3") //6 go程释放了锁 获得锁然后继续执行
}
fmt.Println("[2] condition..........4")
c.L.Unlock() //7解锁
time.Sleep(1 * time.Second)
fmt.Println("main end...")
}

最新文章

  1. python 内存监控模块之memory_profiler
  2. oracle12c不能进入到http://localhost:5500/em的解决办法
  3. Models
  4. Linux下history命令详解---转载
  5. SQL重复记录查询的几种方法(转)
  6. jQuery.attributes源码分析(attr/prop/val/class)
  7. LeetCode OJ 40. Combination Sum II
  8. angularJS 系列(五)--controller AS 语法
  9. UPS电源效果及有关名词解析
  10. Java字符串连接最佳实践
  11. Linux下服务器重启
  12. mfc100u.dll下载和使用方法
  13. MAMP显示文件列表
  14. Spring 完成自动注入(autowire)
  15. [Swift]LeetCode51. N皇后 | N-Queens
  16. Docker:跨主机容器间通信之overlay [十五]
  17. js_初识js_js基本语法和数据类型
  18. 【转载】 Sqlserver查看数据库死锁的SQL语句
  19. SpringBoot-学习笔记
  20. JAVA进阶3

热门文章

  1. 装饰器login_required
  2. Linux设置普通用户无密码sudo权限
  3. ColorTransform调整显示对象的颜色值
  4. 如何将 Redis 用于微服务通信的事件存储
  5. MySql取消密码强度验证功能
  6. Delphi开发的数据库程序在C:\PDOXUSRS.NET生成文件,拒绝访问及读写权限
  7. selenium的显示等待和隐式等待的区别
  8. php生成一维码以及保存-转载
  9. js实现图片上传本地预览
  10. 在js中把json中的 key去掉双引号的方法