1
0
mirror of https://github.com/golang/go synced 2024-11-26 09:18:07 -07:00
go/test/ken/chan1.go
Russ Cox 918afd9491 move things out of sys into os and runtime
R=r
OCL=28569
CL=28573
2009-05-08 15:21:41 -07:00

59 lines
839 B
Go

// $G $D/$F.go && $L $F.$A && ./$A.out
// 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.
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 {
panicln("r",
"m=", m,
"r=", r,
"h=", h[r]
);
}
h[r] = 2;
}
}
}
func
s(c chan int)
{
for n:=0; n<N; n++ {
r := n;
if h[r] != 0 {
panicln("s");
}
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);
}