#include "llvm/Support/Threading.h"
#include "llvm/Config/config.h"
+#include "llvm/Support/Atomic.h"
#include "llvm/Support/Mutex.h"
-#include <atomic>
#include <cassert>
using namespace llvm;
static bool multithreaded_mode = false;
-static sys::Mutex* global_lock = 0;
+static sys::Mutex* global_lock = nullptr;
bool llvm::llvm_start_multithreaded() {
#if LLVM_ENABLE_THREADS != 0
// We fence here to ensure that all initialization is complete BEFORE we
// return from llvm_start_multithreaded().
- std::atomic_thread_fence(std::memory_order_seq_cst);
+ sys::MemoryFence();
return true;
#else
return false;
// We fence here to insure that all threaded operations are complete BEFORE we
// return from llvm_stop_multithreaded().
- std::atomic_thread_fence(std::memory_order_seq_cst);
+ sys::MemoryFence();
multithreaded_mode = false;
delete global_lock;
static void *ExecuteOnThread_Dispatch(void *Arg) {
ThreadInfo *TI = reinterpret_cast<ThreadInfo*>(Arg);
TI->UserFn(TI->UserData);
- return 0;
+ return nullptr;
}
void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData,
goto error;
// Wait for the thread and clean up.
- ::pthread_join(Thread, 0);
+ ::pthread_join(Thread, nullptr);
error:
::pthread_attr_destroy(&Attr);