1
//===-- llvm/System/Threading.cpp- Control multithreading mode --*- C++ -*-==//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file implements llvm_start_multithreaded() and friends.
12
//===----------------------------------------------------------------------===//
14
#include "llvm/System/Threading.h"
15
#include "llvm/System/Atomic.h"
16
#include "llvm/System/Mutex.h"
17
#include "llvm/Config/config.h"
22
static bool multithreaded_mode = false;
24
static sys::Mutex* global_lock = 0;
26
bool llvm::llvm_start_multithreaded() {
27
#ifdef LLVM_MULTITHREADED
28
assert(!multithreaded_mode && "Already multithreaded!");
29
multithreaded_mode = true;
30
global_lock = new sys::Mutex(true);
32
// We fence here to ensure that all initialization is complete BEFORE we
33
// return from llvm_start_multithreaded().
41
void llvm::llvm_stop_multithreaded() {
42
#ifdef LLVM_MULTITHREADED
43
assert(multithreaded_mode && "Not currently multithreaded!");
45
// We fence here to insure that all threaded operations are complete BEFORE we
46
// return from llvm_stop_multithreaded().
49
multithreaded_mode = false;
54
bool llvm::llvm_is_multithreaded() {
55
return multithreaded_mode;
58
void llvm::llvm_acquire_global_lock() {
59
if (multithreaded_mode) global_lock->acquire();
62
void llvm::llvm_release_global_lock() {
63
if (multithreaded_mode) global_lock->release();