| // run | |
| // Copyright 2015 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 | |
| type T struct { | |
| a, b, c int | |
| } | |
| func usestack() { | |
| usestack1(32) | |
| } | |
| func usestack1(d int) byte { | |
| if d == 0 { | |
| return 0 | |
| } | |
| var b [1024]byte | |
| usestack1(d - 1) | |
| return b[3] | |
| } | |
| const n = 100000 | |
| func main() { | |
| c := make(chan interface{}) | |
| done := make(chan bool) | |
| for i := 0; i < 10; i++ { | |
| go func() { | |
| for j := 0; j < n; j++ { | |
| c <- new(T) | |
| } | |
| done <- true | |
| }() | |
| go func() { | |
| for j := 0; j < n; j++ { | |
| _ = (<-c).(*T) | |
| usestack() | |
| } | |
| done <- true | |
| }() | |
| } | |
| for i := 0; i < 20; i++ { | |
| <-done | |
| } | |
| } |