| //===-- 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_SYSTEM_THREADING_H | |
| #define LLVM_SYSTEM_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 \arg UserFn on a separate | |
| /// thread, passing it the provided \arg 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 |