当前位置: 首页 > news >正文

医院网站建设方案关于网站建设的请示报告

医院网站建设方案,关于网站建设的请示报告,网页设计与制作教程代码,网站服务器在国外的如何做百度推广文章目录 Channel声明存入取出一个简单的死锁分析 个人博客#xff1a;CSDN博客 Channel Channel本质是一个队列多goroutine访问时不需要加锁#xff0c;Channel天然线程安全channel有类型#xff0c;只能写入相同类型channel是引用类型channel必须初始化才能写入数据CSDN博客 Channel Channel本质是一个队列多goroutine访问时不需要加锁Channel天然线程安全channel有类型只能写入相同类型channel是引用类型channel必须初始化才能写入数据make分配内存 声明 var intChan chan intintChan make(chan int, 3)java不是很熟悉感觉chan有点像java的原子类 存入取出 intChan- xxx //存入 a : intChan//取出管道不会自然增长不能超过容量不能从空的管道里取出数据会上DeadLock 如果想要存储任意类型的管道可以用空借口 var allChan chan interface{}但是取出的时候注意类型断言 close(intChan)channel关闭之后就不能再写入了但是能继续读出 关闭之后能用for-range来遍历如果不关闭的话会出现死锁 死锁的情况很多建议多找几篇文章看看写写实操一下 空的缓冲chan相当于无缓冲的chan无缓冲的chan需要接收者传入者否则就会死锁注意及时关闭 只向管道内写入不读取就会deadlock读得慢没有关系 关键是要给每个管道安排一个发送者和接收者 一个简单的死锁分析 package mainimport (fmttime )func write(intChan chan int) {for i : 0; i 5; i {fmt.Println(写入: , i)intChan - itime.Sleep(time.Second)}//close(intChan) }func read(intChan chan int, exitChan chan bool) {for {val, ok : -intChanif !ok {break}fmt.Println(读到, val)}exitChan - trueclose(exitChan) } func main() {intChan : make(chan int, 20)exitChan : make(chan bool, 1)go write(intChan)go read(intChan, exitChan)for {_, ok : -exitChanif !ok {break}} } 输出 写入: 0 读到 0 写入: 1 读到 1 写入: 2 读到 2 写入: 3 读到 3 写入: 4 读到 4 fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]: main.main()E:/JetBrains/GoLandSpace/src/go_code/project01/main/hello.go:36 0xe8goroutine 7 [chan receive]: main.read(0x0?, 0x0?)E:/JetBrains/GoLandSpace/src/go_code/project01/main/hello.go:19 0x99 created by main.mainE:/JetBrains/GoLandSpace/src/go_code/project01/main/hello.go:33 0xd9Process finished with the exit code 2 下面是个人的分析不一定对有大佬可以来指正如果我们不closechannel是可以读的我们可以边读边写并且读的速度是可以更慢或者更快的go底层会通过上下文自行判断。但是这里我们写的协程我们关闭channel在程序运行完之后自行关闭此时我们读的协程会卡在intChan等待读入但是此时还不会报错因为协程会因为主线程结束而结束。但是后面的exitChan会导致报错 package mainimport (fmttime )func write(intChan chan int) {for i : 0; i 5; i {fmt.Println(写入: , i)intChan - itime.Sleep(time.Second)}//close(intChan) }func read(intChan chan int, exitChan chan bool) {for {val, ok : -intChanif !ok {break}fmt.Println(读到, val)}fmt.Println(到了这里)//exitChan - true//close(exitChan) } func main() {intChan : make(chan int, 20)exitChan : make(chan bool, 1)go write(intChan)go read(intChan, exitChan)time.Sleep(time.Second * 10)//for {// _, ok : -exitChan// if !ok {// break// }//} } 这样并没有报错并且发现到了这里没有打印说明read函数作为intChan的接收者一直在等待这时候。 但是主线程运行到下面的for的时候此时exitChan是空的因为intChan一直在死循环等待所以触发了死锁 只读只写 var chanIn chan- int//只写var chanOut -chan int//只读select {case …}可以安全地取出数据 使用recover捕获协程终端 panic
http://wiki.neutronadmin.com/news/85931/

相关文章:

  • 购物建设网站费用网页布局网站
  • 佛山网站建设有限公司找别人做网站要注意什么
  • 中国制造网官方网站首页前端刚毕业开多少工资
  • 高端网站建设软件开发个人网站推荐
  • 自己做网站有什么意义网站开发转型
  • 上海浦东设计网站建设网站建设策划书范本
  • 杭州公司建站模板工作室主题网站模板
  • 站长工具a级北京餐饮品牌设计公司
  • 网站开发初学wordpress后台经常504
  • 小何自助建站湖南二维码标签报价
  • 好一点的网站建设公司如何自己建网址
  • 长春门户网站建设北京软件外包公司排行榜
  • 天津做公司网站阿里云网站商城建设
  • 找人做网站如何担保快速做网站关键词排名
  • WordPress资讯站点源码在线设计公司logo图标
  • 温州中小企业网站建设自己编写网站
  • 国外网站建设品牌wordpress企业中文模板
  • 动漫网站做毕业设计简单吗市场调研网站有哪些
  • 触屏版网站模板张家界网站建设公司
  • 网站空间商排行榜成都装修设计公司首选
  • 网站设计公司 无锡海口自助建站系统
  • 淘宝关键词排名查询网站市场营销策略方案
  • 建设招标网 手机官方网站wordpress分类图标列表
  • 网站结构和布局区别游戏网站开发过程
  • 新手做网站视频大理微网站建设
  • 成都建立网站的公司浙江综合网站建设配件
  • 项目建设备案网站在百度上怎么发布广告
  • 网站建设必备条件wordpress怎么做
  • 公司官网用什么建站程序新中式装修效果图
  • 岳阳手机网站建设商场设计理念