Created
June 19, 2020 20:04
-
-
Save fmeyer/0295bb03f87be52050039dc70faa3c3f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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 | |
// This program produced false race reports when run under the C/C++ | |
// ThreadSanitizer, as it did not understand the synchronization in | |
// the Go code. | |
/* | |
#cgo CFLAGS: -fsanitize=thread | |
#cgo LDFLAGS: -fsanitize=thread | |
int val; | |
int getVal() { | |
return val; | |
} | |
void setVal(int i) { | |
val = i; | |
} | |
*/ | |
import "C" | |
import ( | |
"runtime" | |
) | |
func main() { | |
runtime.LockOSThread() | |
C.setVal(1) | |
c := make(chan bool) | |
go func() { | |
runtime.LockOSThread() | |
C.setVal(2) | |
c <- true | |
}() | |
<-c | |
if v := C.getVal(); v != 2 { | |
panic(v) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment