Update sync2 to just use atomic intrinsics rather than the parapoly wrappers

This commit is contained in:
gingerBill
2021-04-12 15:22:40 +01:00
parent e3ee005404
commit 4fb4ada2c7
7 changed files with 163 additions and 230 deletions
+5 -6
View File
@@ -2,7 +2,6 @@
//+private
package sync2
import "intrinsics"
import win32 "core:sys/windows"
import "core:time"
@@ -12,24 +11,24 @@ raw_channel_wait_queue_wait_on :: proc(state: ^uintptr, timeout: time.Duration)
ms = win32.DWORD((max(time.duration_nanoseconds(timeout), 0) + 999999)/1000000);
}
v := intrinsics.atomic_load(state);
v := atomic_load(state);
for v == 0 {
win32.WaitOnAddress(state, &v, size_of(state^), ms);
v = intrinsics.atomic_load(state);
v = atomic_load(state);
}
intrinsics.atomic_store(state, 0);
atomic_store(state, 0);
}
raw_channel_wait_queue_signal :: proc(q: ^Raw_Channel_Wait_Queue) {
for x := q; x != nil; x = x.next {
intrinsics.atomic_add(x.state, 1);
atomic_add(x.state, 1);
win32.WakeByAddressSingle(x.state);
}
}
raw_channel_wait_queue_broadcast :: proc(q: ^Raw_Channel_Wait_Queue) {
for x := q; x != nil; x = x.next {
intrinsics.atomic_add(x.state, 1);
atomic_add(x.state, 1);
win32.WakeByAddressAll(x.state);
}
}