diff options
author | Zachary Turner <zturner@google.com> | 2014-06-16 22:49:41 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2014-06-16 22:49:41 +0000 |
commit | 5ea46694d0b48eebcf04d9e1fc0dac6382356f32 (patch) | |
tree | 686459ef65febf5538b05e7f68c26f04c6a5d7c8 /lib/Support/Threading.cpp | |
parent | 298ff80849de645ab7afb92004759350309de400 (diff) | |
download | llvm-5ea46694d0b48eebcf04d9e1fc0dac6382356f32.tar.gz llvm-5ea46694d0b48eebcf04d9e1fc0dac6382356f32.tar.bz2 llvm-5ea46694d0b48eebcf04d9e1fc0dac6382356f32.tar.xz |
Revert r211066, 211067, 211068, 211069, 211070.
These were committed accidentally from the wrong branch before having
a review sign-off.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211072 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/Threading.cpp')
-rw-r--r-- | lib/Support/Threading.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/lib/Support/Threading.cpp b/lib/Support/Threading.cpp index 838a71b789..1acfa79b11 100644 --- a/lib/Support/Threading.cpp +++ b/lib/Support/Threading.cpp @@ -7,8 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file implements helper functions for running LLVM in a multi-threaded -// environment. +// This file implements llvm_start_multithreaded() and friends. // //===----------------------------------------------------------------------===// @@ -20,14 +19,50 @@ using namespace llvm; -bool llvm::llvm_is_multithreaded() { +static bool multithreaded_mode = false; + +static sys::Mutex* global_lock = nullptr; + +bool llvm::llvm_start_multithreaded() { #if LLVM_ENABLE_THREADS != 0 + assert(!multithreaded_mode && "Already multithreaded!"); + multithreaded_mode = true; + global_lock = new sys::Mutex(true); + + // We fence here to ensure that all initialization is complete BEFORE we + // return from llvm_start_multithreaded(). + sys::MemoryFence(); return true; #else return false; #endif } +void llvm::llvm_stop_multithreaded() { +#if LLVM_ENABLE_THREADS != 0 + assert(multithreaded_mode && "Not currently multithreaded!"); + + // We fence here to insure that all threaded operations are complete BEFORE we + // return from llvm_stop_multithreaded(). + sys::MemoryFence(); + + multithreaded_mode = false; + delete global_lock; +#endif +} + +bool llvm::llvm_is_multithreaded() { + return multithreaded_mode; +} + +void llvm::llvm_acquire_global_lock() { + if (multithreaded_mode) global_lock->acquire(); +} + +void llvm::llvm_release_global_lock() { + if (multithreaded_mode) global_lock->release(); +} + #if LLVM_ENABLE_THREADS != 0 && defined(HAVE_PTHREAD_H) #include <pthread.h> |