//===-- llvm/Support/Threading.h - Control multithreading mode --*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // TThis file defines llvm_start_multithreaded() and friends. // //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_THREADING_H #define LLVM_SUPPORT_THREADING_H namespace llvm { /// llvm_start_multithreaded - Allocate and initialize structures needed to /// make LLVM safe for multithreading. The return value indicates whether /// multithreaded initialization succeeded. LLVM will still be operational /// on "failed" return, and will still be safe for hosting threading /// applications in the JIT, but will not be safe for concurrent calls to the /// LLVM APIs. /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. bool llvm_start_multithreaded(); /// llvm_stop_multithreaded - Deallocate structures necessary to make LLVM /// safe for multithreading. /// THIS MUST EXECUTE IN ISOLATION FROM ALL OTHER LLVM API CALLS. void llvm_stop_multithreaded(); /// llvm_is_multithreaded - Check whether LLVM is executing in thread-safe /// mode or not. bool llvm_is_multithreaded(); /// acquire_global_lock - Acquire the global lock. This is a no-op if called /// before llvm_start_multithreaded(). void llvm_acquire_global_lock(); /// release_global_lock - Release the global lock. This is a no-op if called /// before llvm_start_multithreaded(). void llvm_release_global_lock(); /// llvm_execute_on_thread - Execute the given \p UserFn on a separate /// thread, passing it the provided \p UserData. /// /// This function does not guarantee that the code will actually be executed /// on a separate thread or honoring the requested stack size, but tries to do /// so where system support is available. /// /// \param UserFn - The callback to execute. /// \param UserData - An argument to pass to the callback function. /// \param RequestedStackSize - If non-zero, a requested size (in bytes) for /// the thread stack. void llvm_execute_on_thread(void (*UserFn)(void*), void *UserData, unsigned RequestedStackSize = 0); } #endif