1 //===-- Condition.h ---------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_DBCondition_h_ 11 #define liblldb_DBCondition_h_ 12 #if defined(__cplusplus) 13 14 15 #include <pthread.h> 16 #include "lldb/Host/Mutex.h" 17 18 namespace lldb_private { 19 20 class TimeValue; 21 22 //---------------------------------------------------------------------- 23 /// @class Condition Condition.h "lldb/Host/Condition.h" 24 /// @brief A C++ wrapper class for pthread condition variables. 25 /// 26 /// A class that wraps up a pthread condition (pthread_cond_t). The 27 /// class will create a pthread condition when an instance is 28 /// constructed, and detroy it when it is destructed. It also provides 29 /// access to the standard pthread condition calls. 30 //---------------------------------------------------------------------- 31 class Condition 32 { 33 public: 34 35 //------------------------------------------------------------------ 36 /// Default constructor 37 /// 38 /// The default constructor will initialize a new pthread condition 39 /// and maintain the condition in the object state. 40 //------------------------------------------------------------------ 41 Condition (); 42 43 //------------------------------------------------------------------ 44 /// Destructor 45 /// 46 /// Destroys the pthread condition that the object owns. 47 //------------------------------------------------------------------ 48 ~Condition (); 49 50 //------------------------------------------------------------------ 51 /// Unblock all threads waiting for a condition variable 52 /// 53 /// @return 54 /// The return value from \c pthread_cond_broadcast() 55 //------------------------------------------------------------------ 56 int 57 Broadcast (); 58 59 //------------------------------------------------------------------ 60 /// Unblocks one thread waiting for the condition variable 61 /// 62 /// @return 63 /// The return value from \c pthread_cond_signal() 64 //------------------------------------------------------------------ 65 int 66 Signal (); 67 68 //------------------------------------------------------------------ 69 /// Wait for the condition variable to be signaled. 70 /// 71 /// The Wait() function atomically blocks the current thread 72 /// waiting on this object's condition variable, and unblocks 73 /// \a mutex. The waiting thread unblocks only after another thread 74 /// signals or broadcasts this object's condition variable. 75 /// 76 /// If \a abstime is non-NULL, this function will return when the 77 /// system time reaches the time specified in \a abstime if the 78 /// condition variable doesn't get unblocked. If \a abstime is NULL 79 /// this function will wait for an infinite amount of time for the 80 /// condition variable to be unblocked. 81 /// 82 /// The current thread re-acquires the lock on \a mutex following 83 /// the wait. 84 /// 85 /// @param[in] mutex 86 /// The mutex to use in the \c pthread_cond_timedwait() or 87 /// \c pthread_cond_wait() calls. 88 /// 89 /// @param[in] abstime 90 /// An absolute time at which to stop waiting if non-NULL, else 91 /// wait an infinite amount of time for the condition variable 92 /// toget signaled. 93 /// 94 /// @param[out] timed_out 95 /// If not NULL, will be set to true if the wait timed out, and 96 // false otherwise. 97 /// 98 /// @see Condition::Broadcast() 99 /// @see Condition::Signal() 100 //------------------------------------------------------------------ 101 int 102 Wait (Mutex &mutex, const TimeValue *abstime = NULL, bool *timed_out = NULL); 103 104 protected: 105 //------------------------------------------------------------------ 106 // Member variables 107 //------------------------------------------------------------------ 108 pthread_cond_t m_condition; ///< The condition variable. 109 110 //------------------------------------------------------------------ 111 /// Get accessor to the pthread condition object. 112 /// 113 /// @return 114 /// A pointer to the condition variable owned by this object. 115 //------------------------------------------------------------------ 116 pthread_cond_t * 117 GetCondition (); 118 }; 119 120 } // namespace lldb_private 121 122 #endif // #if defined(__cplusplus) 123 #endif 124 125