2015-06-17 17:11:57 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import "runtime"
|
|
|
|
|
|
|
|
const N = 10
|
|
|
|
|
2015-11-06 18:49:29 +00:00
|
|
|
func agoroutine(started chan<- struct{}, done chan<- struct{}, i int) {
|
|
|
|
started <- struct{}{}
|
2015-06-17 17:11:57 +00:00
|
|
|
done <- struct{}{}
|
|
|
|
}
|
|
|
|
|
2018-03-22 17:02:15 +00:00
|
|
|
var dummy int
|
|
|
|
|
2015-06-17 17:11:57 +00:00
|
|
|
func stacktraceme() {
|
2018-03-22 17:02:15 +00:00
|
|
|
dummy++
|
2015-06-17 17:11:57 +00:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
done := make(chan struct{})
|
2015-11-06 18:49:29 +00:00
|
|
|
started := make(chan struct{})
|
2015-06-17 17:11:57 +00:00
|
|
|
for i := 0; i < N; i++ {
|
2015-11-06 18:49:29 +00:00
|
|
|
go agoroutine(started, done, i)
|
|
|
|
}
|
|
|
|
for i := 0; i < N; i++ {
|
|
|
|
<-started
|
2015-06-17 17:11:57 +00:00
|
|
|
}
|
|
|
|
runtime.Gosched()
|
|
|
|
stacktraceme()
|
|
|
|
for i := 0; i < N; i++ {
|
|
|
|
<-done
|
|
|
|
}
|
2015-08-28 20:06:29 +00:00
|
|
|
n := 0
|
|
|
|
func1(n + 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
func func1(n int) {
|
|
|
|
func2(n + 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
func func2(n int) {
|
|
|
|
func3(n + 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
func func3(n int) {
|
|
|
|
stacktraceme()
|
2015-06-17 17:11:57 +00:00
|
|
|
}
|