// Copyright 2016 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 | |
// The stubs for the C functions read and write the same slot on the | |
// g0 stack when copying arguments in and out. | |
/* | |
#cgo CFLAGS: -fsanitize=thread | |
#cgo LDFLAGS: -fsanitize=thread | |
int Func1() { | |
return 0; | |
} | |
void Func2(int x) { | |
(void)x; | |
} | |
*/ | |
import "C" | |
func main() { | |
const N = 10000 | |
done := make(chan bool, N) | |
for i := 0; i < N; i++ { | |
go func() { | |
C.Func1() | |
done <- true | |
}() | |
go func() { | |
C.Func2(0) | |
done <- true | |
}() | |
} | |
for i := 0; i < 2*N; i++ { | |
<-done | |
} | |
} |