// 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 | |
} | |
} |