diff options
author | Marat Dukhan <maratek@gmail.com> | 2020-04-10 16:51:20 -0700 |
---|---|---|
committer | Marat Dukhan <maratek@gmail.com> | 2020-04-10 16:51:20 -0700 |
commit | fa7261344568f86760231591a7158519fd43f382 (patch) | |
tree | 8285be5ea2c76f74a6fe61e240def71cf3106868 | |
parent | 52a2f5706db7f9f805c2e0b5bfc56477b08b841a (diff) | |
download | pthreadpool-fa7261344568f86760231591a7158519fd43f382.tar.gz |
Add compiler barriers to MSVC atomics implementation
-rw-r--r-- | src/threadpool-atomics.h | 8 |
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) |