1// run 2 3// Copyright 2009 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Torture test for goroutines. 8// Make a lot of goroutines, threaded together, and tear them down cleanly. 9 10package main 11 12import ( 13 "os" 14 "strconv" 15) 16 17func f(left, right chan int) { 18 left <- <-right 19} 20 21func main() { 22 var n = 10000 23 if len(os.Args) > 1 { 24 var err error 25 n, err = strconv.Atoi(os.Args[1]) 26 if err != nil { 27 print("bad arg\n") 28 os.Exit(1) 29 } 30 } 31 leftmost := make(chan int) 32 right := leftmost 33 left := leftmost 34 for i := 0; i < n; i++ { 35 right = make(chan int) 36 go f(left, right) 37 left = right 38 } 39 go func(c chan int) { c <- 1 }(right) 40 <-leftmost 41} 42