STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
condition_variable_any Class Reference

Public Member Functions

 condition_variable_any ()
 
 ~condition_variable_any () _NOEXCEPT
 
 condition_variable_any (const condition_variable_any &)=delete
 
condition_variable_anyoperator= (const condition_variable_any &)=delete
 
void notify_one () _NOEXCEPT
 
void notify_all () _NOEXCEPT
 
template<class _Mutex >
void wait (_Mutex &_Xtrnl)
 
template<class _Mutex , class _Predicate >
void wait (_Mutex &_Xtrnl, _Predicate _Pred)
 
template<class _Lock , class _Rep , class _Period >
_Cv_status wait_for (_Lock &_Lck, const chrono::duration< _Rep, _Period > &_Rel_time)
 
template<class _Lock , class _Rep , class _Period , class _Predicate >
bool wait_for (_Lock &_Lck, const chrono::duration< _Rep, _Period > &_Rel_time, _Predicate _Pred)
 
template<class _Lock , class _Clock , class _Duration >
_Cv_status wait_until (_Lock &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time)
 
template<class _Lock , class _Clock , class _Duration , class _Predicate >
bool wait_until (_Lock &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time, _Predicate _Pred)
 
template<class _Mutex >
_Cv_status wait_until (_Mutex &_Xtrnl, const xtime *_Abs_time)
 
template<class _Mutex , class _Predicate >
bool wait_until (_Mutex &_Xtrnl, const xtime *_Abs_time, _Predicate _Pred)
 

Private Member Functions

_Cnd_t _Mycnd () _NOEXCEPT
 

Static Private Member Functions

template<class _Mutex >
static void _Relock (_Mutex &_Xtrnl) _NOEXCEPT
 

Private Attributes

shared_ptr< mutex_Myptr
 
aligned_storage< _Cnd_internal_imp_size, _Cnd_internal_imp_alignment >::type _Cnd_storage
 

Constructor & Destructor Documentation

condition_variable_any::condition_variable_any ( )
inline
26  { // construct
27  _Myptr = _STD make_shared<mutex>();
29  }
_CRTIMP2_PURE void __cdecl _Cnd_init_in_situ(_Cnd_t)
shared_ptr< mutex > _Myptr
Definition: condition_variable:156
_Cnd_t _Mycnd() _NOEXCEPT
Definition: condition_variable:161
condition_variable_any::~condition_variable_any ( )
inline
32  { // destroy
34  }
_Cnd_t _Mycnd() _NOEXCEPT
Definition: condition_variable:161
_CRTIMP2_PURE void __cdecl _Cnd_destroy_in_situ(_Cnd_t)
condition_variable_any::condition_variable_any ( const condition_variable_any )
delete

Member Function Documentation

_Cnd_t condition_variable_any::_Mycnd ( )
inlineprivate
162  { // get pointer to _Cnd_internal_imp_t inside _Cnd_storage
163  return (reinterpret_cast<_Cnd_t>(&_Cnd_storage));
164  }
aligned_storage< _Cnd_internal_imp_size, _Cnd_internal_imp_alignment >::type _Cnd_storage
Definition: condition_variable:159
template<class _Mutex >
static void condition_variable_any::_Relock ( _Mutex &  _Xtrnl)
inlinestaticprivate
168  { // relocks external mutex, terminate() on failure
169  // LWG 2135 says terminate rather than leaving the mutex unlocked;
170  // we slam into noexcept here for that for easier user debugging
171  _Xtrnl.lock();
172  }
void condition_variable_any::notify_all ( )
inline
46  { // wake up all waiters
49  }
shared_ptr< mutex > _Myptr
Definition: condition_variable:156
int _Cnd_broadcastX(_Cnd_t _Cnd)
Definition: xthread:105
_Cnd_t _Mycnd() _NOEXCEPT
Definition: condition_variable:161
Definition: mutex:183
void condition_variable_any::notify_one ( )
inline
40  { // wake up one waiter
43  }
shared_ptr< mutex > _Myptr
Definition: condition_variable:156
_Cnd_t _Mycnd() _NOEXCEPT
Definition: condition_variable:161
int _Cnd_signalX(_Cnd_t _Cnd)
Definition: xthread:110
Definition: mutex:183
condition_variable_any& condition_variable_any::operator= ( const condition_variable_any )
delete
template<class _Mutex >
void condition_variable_any::wait ( _Mutex &  _Xtrnl)
inline
53  { // wait for signal
54  {
55  shared_ptr<mutex> _Ptr = _Myptr; // for immunity to *this destruction
56  lock_guard<mutex> _Lck(*_Ptr);
57  _Xtrnl.unlock(); // could throw
58  _Cnd_waitX(_Mycnd(), _Ptr->_Mymtx());
59  } // unlock
60 
61  _Relock(_Xtrnl);
62  }
shared_ptr< mutex > _Myptr
Definition: condition_variable:156
_Cnd_t _Mycnd() _NOEXCEPT
Definition: condition_variable:161
Definition: mutex:183
static void _Relock(_Mutex &_Xtrnl) _NOEXCEPT
Definition: condition_variable:167
int _Cnd_waitX(_Cnd_t _Cnd, _Mtx_t _Mtx)
Definition: xthread:94
template<class _Mutex , class _Predicate >
void condition_variable_any::wait ( _Mutex &  _Xtrnl,
_Predicate  _Pred 
)
inline
67  { // wait for signal and check predicate
68  while (!_Pred())
69  wait(_Xtrnl);
70  }
_FwdIt const _Ty _Pr _Pred
Definition: algorithm:1985
void wait(_Mutex &_Xtrnl)
Definition: condition_variable:52
template<class _Lock , class _Rep , class _Period >
_Cv_status condition_variable_any::wait_for ( _Lock &  _Lck,
const chrono::duration< _Rep, _Period > &  _Rel_time 
)
inline
78  { // wait for duration
79  stdext::threads::xtime _Tgt = _To_xtime(_Rel_time);
80  return (wait_until(_Lck, &_Tgt));
81  }
xtime _To_xtime(const chrono::duration< _Rep, _Period > &_Rel_time)
Definition: chrono:1018
struct xtime xtime
_Cv_status wait_until(_Lock &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: condition_variable:101
template<class _Lock , class _Rep , class _Period , class _Predicate >
bool condition_variable_any::wait_for ( _Lock &  _Lck,
const chrono::duration< _Rep, _Period > &  _Rel_time,
_Predicate  _Pred 
)
inline
91  { // wait for signal with timeout and check predicate
92  while (!_Pred())
93  if (wait_for(_Lck, _Rel_time) == cv_status::timeout)
94  return (_Pred());
95  return (true);
96  }
_FwdIt const _Ty _Pr _Pred
Definition: algorithm:1985
_Cv_status wait_for(_Lock &_Lck, const chrono::duration< _Rep, _Period > &_Rel_time)
Definition: condition_variable:75
template<class _Lock , class _Clock , class _Duration >
_Cv_status condition_variable_any::wait_until ( _Lock &  _Lck,
const chrono::time_point< _Clock, _Duration > &  _Abs_time 
)
inline
104  { // wait until time point
105  return (wait_for(_Lck, _Abs_time - _Clock::now()));
106  }
_Cv_status wait_for(_Lock &_Lck, const chrono::duration< _Rep, _Period > &_Rel_time)
Definition: condition_variable:75
template<class _Lock , class _Clock , class _Duration , class _Predicate >
bool condition_variable_any::wait_until ( _Lock &  _Lck,
const chrono::time_point< _Clock, _Duration > &  _Abs_time,
_Predicate  _Pred 
)
inline
116  { // wait for signal with timeout and check predicate
117  while (!_Pred())
118  if (wait_until(_Lck, _Abs_time) == cv_status::timeout)
119  return (_Pred());
120  return (true);
121  }
_FwdIt const _Ty _Pr _Pred
Definition: algorithm:1985
_Cv_status wait_until(_Lock &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: condition_variable:101
template<class _Mutex >
_Cv_status condition_variable_any::wait_until ( _Mutex &  _Xtrnl,
const xtime _Abs_time 
)
inline
127  { // wait for signal with timeout
128  int _Res;
129 
130  {
131  shared_ptr<mutex> _Ptr = _Myptr; // for immunity to *this destruction
132  lock_guard<mutex> _Lck(*_Ptr);
133  _Xtrnl.unlock(); // could throw
134  _Res = _Cnd_timedwaitX(_Mycnd(), _Ptr->_Mymtx(), _Abs_time);
135  } // unlock
136 
137  _Relock(_Xtrnl);
138  return (_Res == _Thrd_timedout
140  }
shared_ptr< mutex > _Myptr
Definition: condition_variable:156
_Cnd_t _Mycnd() _NOEXCEPT
Definition: condition_variable:161
int _Cnd_timedwaitX(_Cnd_t _Cnd, _Mtx_t _Mtx, const xtime *_Xt)
Definition: xthread:99
Definition: mutex:183
static void _Relock(_Mutex &_Xtrnl) _NOEXCEPT
Definition: condition_variable:167
Definition: xthreads.h:20
template<class _Mutex , class _Predicate >
bool condition_variable_any::wait_until ( _Mutex &  _Xtrnl,
const xtime _Abs_time,
_Predicate  _Pred 
)
inline
148  { // wait for signal with timeout and check predicate
149  while (!_Pred())
150  if (wait_until(_Xtrnl, _Abs_time) == cv_status::timeout)
151  return (_Pred());
152  return (true);
153  }
_FwdIt const _Ty _Pr _Pred
Definition: algorithm:1985
_Cv_status wait_until(_Lock &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: condition_variable:101

Member Data Documentation

aligned_storage<_Cnd_internal_imp_size, _Cnd_internal_imp_alignment>::type condition_variable_any::_Cnd_storage
private
shared_ptr<mutex> condition_variable_any::_Myptr
private

The documentation for this class was generated from the following file: