go select6 源码

  • 2022-07-15
  • 浏览 (858)

golang select6 代码

文件路径:/test/chan/select6.go

// run

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test for select: Issue 2075
// A bug in select corrupts channel queues of failed cases
// if there are multiple waiters on those channels and the
// select is the last in the queue. If further waits are made
// on the channel without draining it first then those waiters
// will never wake up. In the code below c1 is such a channel.

package main

func main() {
	c1 := make(chan bool)
	c2 := make(chan bool)
	c3 := make(chan bool)
	go func() { <-c1 }()
	go func() {
		select {
		case <-c1:
			panic("dummy")
		case <-c2:
			c3 <- true
		}
		<-c1
	}()
	go func() { c2 <- true }()
	<-c3
	c1 <- true
	c1 <- true
}

相关信息

go 源码目录

相关文章

go doubleselect 源码

go fifo 源码

go goroutines 源码

go nonblock 源码

go perm 源码

go powser1 源码

go powser2 源码

go select 源码

go select2 源码

go select3 源码

0  赞