aboutsummaryrefslogtreecommitdiff
path: root/src/platform/windows
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-22 17:17:38 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-22 17:17:38 -0800
commit4104962dfc897f51f0b6e7bfabd2e9766085400e (patch)
tree3d404f920f0d29dbbc66e5b38a36eece66f6d38c /src/platform/windows
parent6055f936411ca832abbfcbddba23e1e638f77e26 (diff)
downloadnng-4104962dfc897f51f0b6e7bfabd2e9766085400e.tar.gz
nng-4104962dfc897f51f0b6e7bfabd2e9766085400e.tar.bz2
nng-4104962dfc897f51f0b6e7bfabd2e9766085400e.zip
pollers: use atomic bit masking operations to eliminate lockss
This is done for kqueue and poll. Others coming soon.
Diffstat (limited to 'src/platform/windows')
-rw-r--r--src/platform/windows/win_thread.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/platform/windows/win_thread.c b/src/platform/windows/win_thread.c
index 9e74056d..c76209c1 100644
--- a/src/platform/windows/win_thread.c
+++ b/src/platform/windows/win_thread.c
@@ -325,6 +325,18 @@ nni_atomic_init(nni_atomic_int *v)
InterlockedExchange(&v->v, 0);
}
+int
+nni_atomic_or(nni_atomic_int *v, int mask)
+{
+ return (InterlockedOr(&v->v, mask));
+}
+
+int
+nni_atomic_and(nni_atomic_int *v, int mask)
+{
+ return (InterlockedAnd(&v->v, mask));
+}
+
void
nni_atomic_inc(nni_atomic_int *v)
{