当前位置: 首页 > 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://www.zqtcl.cn/news/967029/

相关文章:

  • 2019年的阜南县建设修路网站洛阳哪里有做网站的
  • 家里电脑可以做网站服务器吗佛山网络公司哪家最好
  • 做网站属于无形资产还是费用网站制作二维码
  • ps为什么做不了视频网站最近做网站开发有前途没
  • 平面设计师参考网站做网站建设推广好做吗
  • 网站被别的域名绑定泰安做网站网络公司
  • 建设部网站业绩如何录入免费素材图片下载
  • 佛山美容网站建设如何有效的推广宣传
  • 网站全屏轮播怎么做nginx 代理 wordpress
  • 海淀公司网站搭建二级目录怎么做网站
  • 石家庄定制网站建设凡科建站做的网站收录慢吗
  • 海口企业自助建站品牌建设三年行动方案
  • 网站建设流程平台域名分析网站
  • 旅游类网站如何做推广随机网站生成器
  • 竖导航网站做网站被坑
  • 散文古诗网站建设目标做公司网站要钱吗
  • 营销网站建设规划小浪底水利枢纽建设管理局网站
  • 建站的目的网站的月度流量统计报告怎么做
  • 网站备案添加域名拼多多代运营公司十大排名
  • 网站访客qq获取系统 报价客户管理系统入口
  • 院网站建设情况报告怎么在虚拟主机上建网站
  • 厦门网站建设系统鞍山百度网站怎么制作
  • html5建设网站app开发公司不退款该怎么投诉
  • 南昌网站建设公务手工制作代加工接单网
  • 排名好的手机网站建设你知道吗 网站
  • 网站信息组织优化成都网站制作计划
  • 网站网页背景颜色 多彩做搜狗网站点击赚钱
  • 门户网站开发 系统介绍wordpress 代码在哪
  • 石家庄网站设计建设门面设计效果图
  • 公司设计网站多少钱月子中心网站设计