Source file
src/runtime/race/race_linux_test.go
1
2
3
4
5
6
7
8 package race_test
9
10 import (
11 "sync/atomic"
12 "syscall"
13 "testing"
14 "unsafe"
15 )
16
17 func TestAtomicMmap(t *testing.T) {
18
19
20
21 mem, err := syscall.Mmap(-1, 0, 1<<20, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_ANON|syscall.MAP_PRIVATE)
22 if err != nil {
23 t.Fatalf("mmap failed: %v", err)
24 }
25 defer syscall.Munmap(mem)
26 a := (*uint64)(unsafe.Pointer(&mem[0]))
27 if *a != 0 {
28 t.Fatalf("bad atomic value: %v, want 0", *a)
29 }
30 atomic.AddUint64(a, 1)
31 if *a != 1 {
32 t.Fatalf("bad atomic value: %v, want 1", *a)
33 }
34 atomic.AddUint64(a, 1)
35 if *a != 2 {
36 t.Fatalf("bad atomic value: %v, want 2", *a)
37 }
38 }
39
View as plain text