//===-- 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
