Updating documentation as per Chandler's feedback.

This goes with the earlier commit to remove the static destructor from ManagedStatic.cpp by controlling the allocation and de-allocation of the mutex.

Summary: This is part of the ongoing work to remove static constructors and destructors.

Reviewers: chandlerc, rnk

Reviewed By: rnk

Subscribers: rnk, llvm-commits

Differential Revision: http://reviews.llvm.org/D5473

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219640 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Bieneman 2014-10-13 23:03:45 +00:00
parent af6be11a60
commit 0df98b6821

View File

@ -38,12 +38,25 @@ namespace llvm {
void llvm_execute_on_thread(void (*UserFn)(void*), void *UserData,
unsigned RequestedStackSize = 0);
/// \brief Execute the function specified as a template parameter once.
///
/// Calls \p UserFn once ever. The call uniqueness is based on the address of
/// the function passed in via the template arguement. This means no matter how
/// many times you call llvm_call_once<foo>() in the same or different
/// locations, foo will only be called once.
///
/// Typical usage:
/// \code
/// void foo() {...};
/// ...
/// llvm_call_once<foo>();
/// \endcode
///
/// \param UserFn Function to call once.
template <void (*UserFn)(void)> void llvm_call_once() {
#if !defined(__MINGW__)
static std::once_flag flag;
std::call_once(flag, UserFn);
#else
struct InitOnceWrapper {
InitOnceWrapper() { UserFn(); }