Initial commit: Go 1.23 release state
This commit is contained in:
55
test/ken/chan1.go
Normal file
55
test/ken/chan1.go
Normal file
@@ -0,0 +1,55 @@
|
||||
// run
|
||||
|
||||
// Copyright 2009 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 communication with multiple simultaneous goroutines.
|
||||
|
||||
package main
|
||||
|
||||
import "runtime"
|
||||
|
||||
const N = 1000 // sent messages
|
||||
const M = 10 // receiving goroutines
|
||||
const W = 2 // channel buffering
|
||||
var h [N]int // marking of send/recv
|
||||
|
||||
func r(c chan int, m int) {
|
||||
for {
|
||||
select {
|
||||
case r := <-c:
|
||||
if h[r] != 1 {
|
||||
println("r",
|
||||
"m=", m,
|
||||
"r=", r,
|
||||
"h=", h[r])
|
||||
panic("fail")
|
||||
}
|
||||
h[r] = 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func s(c chan int) {
|
||||
for n := 0; n < N; n++ {
|
||||
r := n
|
||||
if h[r] != 0 {
|
||||
println("s")
|
||||
panic("fail")
|
||||
}
|
||||
h[r] = 1
|
||||
c <- r
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := make(chan int, W)
|
||||
for m := 0; m < M; m++ {
|
||||
go r(c, m)
|
||||
runtime.Gosched()
|
||||
}
|
||||
runtime.Gosched()
|
||||
runtime.Gosched()
|
||||
s(c)
|
||||
}
|
||||
Reference in New Issue
Block a user