Updating documentation as per Chandler's feedback.
authorChris Bieneman <beanz@apple.com>
Mon, 13 Oct 2014 23:03:45 +0000 (23:03 +0000)
committerChris Bieneman <beanz@apple.com>
Mon, 13 Oct 2014 23:03:45 +0000 (23:03 +0000)
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

include/llvm/Support/Threading.h

index 247c49c34e411e9254e96ea43a225e3dd26d7c38..343acda8f843f3d2322cd5a8f526c50b5fabad93 100644 (file)
@@ -38,12 +38,25 @@ namespace llvm {
   void llvm_execute_on_thread(void (*UserFn)(void*), void *UserData,
                               unsigned RequestedStackSize = 0);
 
   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() {
 template <void (*UserFn)(void)> void llvm_call_once() {
-
 #if !defined(__MINGW__)
   static std::once_flag flag;
   std::call_once(flag, UserFn);
 #if !defined(__MINGW__)
   static std::once_flag flag;
   std::call_once(flag, UserFn);
-
 #else
   struct InitOnceWrapper {
     InitOnceWrapper() { UserFn(); }
 #else
   struct InitOnceWrapper {
     InitOnceWrapper() { UserFn(); }