...
Source file
src/runtime/atomic_pointer.go
Documentation: runtime
1
2
3
4
5 package runtime
6
7 import (
8 "runtime/internal/atomic"
9 "unsafe"
10 )
11
12
13
14
15
16
17
18
19
20
21
22 func atomicstorep(ptr unsafe.Pointer, new unsafe.Pointer) {
23 writebarrierptr_prewrite((*uintptr)(ptr), uintptr(new))
24 atomic.StorepNoWB(noescape(ptr), new)
25 }
26
27
28 func casp(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool {
29
30
31
32 writebarrierptr_prewrite((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
33 return atomic.Casp1((*unsafe.Pointer)(noescape(unsafe.Pointer(ptr))), noescape(old), new)
34 }
35
36
37
38
39
40
41 func sync_atomic_StoreUintptr(ptr *uintptr, new uintptr)
42
43
44
45 func sync_atomic_StorePointer(ptr *unsafe.Pointer, new unsafe.Pointer) {
46 writebarrierptr_prewrite((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
47 sync_atomic_StoreUintptr((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
48 }
49
50
51 func sync_atomic_SwapUintptr(ptr *uintptr, new uintptr) uintptr
52
53
54
55 func sync_atomic_SwapPointer(ptr *unsafe.Pointer, new unsafe.Pointer) unsafe.Pointer {
56 writebarrierptr_prewrite((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
57 old := unsafe.Pointer(sync_atomic_SwapUintptr((*uintptr)(noescape(unsafe.Pointer(ptr))), uintptr(new)))
58 return old
59 }
60
61
62 func sync_atomic_CompareAndSwapUintptr(ptr *uintptr, old, new uintptr) bool
63
64
65
66 func sync_atomic_CompareAndSwapPointer(ptr *unsafe.Pointer, old, new unsafe.Pointer) bool {
67 writebarrierptr_prewrite((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
68 return sync_atomic_CompareAndSwapUintptr((*uintptr)(noescape(unsafe.Pointer(ptr))), uintptr(old), uintptr(new))
69 }
70
View as plain text