aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarat Dukhan <maratek@gmail.com>2020-04-10 16:51:20 -0700
committerMarat Dukhan <maratek@gmail.com>2020-04-10 16:51:20 -0700
commitfa7261344568f86760231591a7158519fd43f382 (patch)
tree8285be5ea2c76f74a6fe61e240def71cf3106868
parent52a2f5706db7f9f805c2e0b5bfc56477b08b841a (diff)
downloadpthreadpool-fa7261344568f86760231591a7158519fd43f382.tar.gz
Add compiler barriers to MSVC atomics implementation
-rw-r--r--src/threadpool-atomics.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/threadpool-atomics.h b/src/threadpool-atomics.h
index 141c202..be6c465 100644
--- a/src/threadpool-atomics.h
+++ b/src/threadpool-atomics.h
@@ -152,7 +152,8 @@
pthreadpool_atomic_uint32_t* address,
uint32_t value)
{
- /* x86-64 stores always have release semantics */
+ /* x86-64 stores always have release semantics; use only a compiler barrier */
+ _WriteBarrier();
*address = value;
}
@@ -160,7 +161,8 @@
pthreadpool_atomic_size_t* address,
size_t value)
{
- /* x86-64 stores always have release semantics */
+ /* x86-64 stores always have release semantics; use only a compiler barrier */
+ _WriteBarrier();
*address = value;
}
@@ -189,9 +191,11 @@
static inline void pthreadpool_fence_acquire() {
_mm_lfence();
+ _ReadBarrier();
}
static inline void pthreadpool_fence_release() {
+ _WriteBarrier();
_mm_sfence();
}
#elif defined(_MSC_VER) && defined(_M_IX86)