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

Public Member Functions

 shared_timed_mutex () _NOEXCEPT
 
 ~shared_timed_mutex () _NOEXCEPT
 
void lock ()
 
bool try_lock ()
 
template<class _Rep , class _Period >
bool try_lock_for (const chrono::duration< _Rep, _Period > &_Rel_time)
 
template<class _Clock , class _Duration >
bool try_lock_until (const chrono::time_point< _Clock, _Duration > &_Abs_time)
 
void unlock ()
 
void lock_shared ()
 
bool try_lock_shared ()
 
template<class _Rep , class _Period >
bool try_lock_shared_for (const chrono::duration< _Rep, _Period > &_Rel_time)
 
template<class _Time >
bool _Try_lock_shared_until (_Time _Abs_time)
 
template<class _Clock , class _Duration >
bool try_lock_shared_until (const chrono::time_point< _Clock, _Duration > &_Abs_time)
 
bool try_lock_shared_until (const xtime *_Abs_time)
 
void unlock_shared ()
 
 shared_timed_mutex (const shared_timed_mutex &)=delete
 
shared_timed_mutexoperator= (const shared_timed_mutex &)=delete
 

Private Types

typedef unsigned int _Read_cnt_t
 

Private Attributes

mutex _Mymtx
 
condition_variable _Read_queue
 
condition_variable _Write_queue
 
_Read_cnt_t _Readers
 
bool _Writing
 

Static Private Attributes

static constexpr _Read_cnt_t _Max_readers = _Read_cnt_t(-1)
 

Member Typedef Documentation

typedef unsigned int shared_timed_mutex::_Read_cnt_t
private

Constructor & Destructor Documentation

shared_timed_mutex::shared_timed_mutex ( )
inline
96  _Readers(0), _Writing(false)
97  { // default construct
98  }
mutex _Mymtx
Definition: shared_mutex:248
condition_variable _Read_queue
Definition: shared_mutex:249
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
_Read_cnt_t _Readers
Definition: shared_mutex:250
shared_timed_mutex::~shared_timed_mutex ( )
inline
101  { // destroy the object
102  }
shared_timed_mutex::shared_timed_mutex ( const shared_timed_mutex )
delete

Member Function Documentation

template<class _Time >
bool shared_timed_mutex::_Try_lock_shared_until ( _Time  _Abs_time)
inline
201  { // try to lock non-exclusive until absolute time
202  auto _Can_acquire = [this] {
203  return (!_Writing && _Readers < _Max_readers); };
204 
205  unique_lock<mutex> _Lock(_Mymtx);
206 
207  if (!_Write_queue.wait_until(_Lock, _Abs_time, _Can_acquire))
208  return (false);
209 
210  ++_Readers;
211  return (true);
212  }
Definition: mutex:258
mutex _Mymtx
Definition: shared_mutex:248
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
static constexpr _Read_cnt_t _Max_readers
Definition: shared_mutex:91
_Cv_status wait_until(unique_lock< mutex > &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: mutex:599
_Read_cnt_t _Readers
Definition: shared_mutex:250
void shared_timed_mutex::lock ( )
inline
105  { // lock exclusive
106  unique_lock<mutex> _Lock(_Mymtx);
107  while (_Writing)
108  _Write_queue.wait(_Lock);
109  _Writing = true;
110  while (0 < _Readers)
111  _Read_queue.wait(_Lock); // wait for writing, no readers
112  }
Definition: mutex:258
mutex _Mymtx
Definition: shared_mutex:248
condition_variable _Read_queue
Definition: shared_mutex:249
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
void wait(unique_lock< mutex > &_Lck)
Definition: mutex:563
_Read_cnt_t _Readers
Definition: shared_mutex:250
void shared_timed_mutex::lock_shared ( )
inline
171  { // lock non-exclusive
172  unique_lock<mutex> _Lock(_Mymtx);
173  while (_Writing || _Readers == _Max_readers)
174  _Write_queue.wait(_Lock);
175  ++_Readers;
176  }
Definition: mutex:258
mutex _Mymtx
Definition: shared_mutex:248
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
void wait(unique_lock< mutex > &_Lck)
Definition: mutex:563
static constexpr _Read_cnt_t _Max_readers
Definition: shared_mutex:91
_Read_cnt_t _Readers
Definition: shared_mutex:250
shared_timed_mutex& shared_timed_mutex::operator= ( const shared_timed_mutex )
delete
bool shared_timed_mutex::try_lock ( )
inline
115  { // try to lock exclusive
116  lock_guard<mutex> _Lock(_Mymtx);
117  if (_Writing || 0 < _Readers)
118  return (false);
119  else
120  { // set writing, no readers
121  _Writing = true;
122  return (true);
123  }
124  }
mutex _Mymtx
Definition: shared_mutex:248
bool _Writing
Definition: shared_mutex:251
Definition: mutex:182
_Read_cnt_t _Readers
Definition: shared_mutex:250
template<class _Rep , class _Period >
bool shared_timed_mutex::try_lock_for ( const chrono::duration< _Rep, _Period > &  _Rel_time)
inline
130  { // try to lock for duration
131  return (try_lock_until(chrono::steady_clock::now() + _Rel_time));
132  }
bool try_lock_until(const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: shared_mutex:136
static time_point now() _NOEXCEPT
Definition: chrono:997
bool shared_timed_mutex::try_lock_shared ( )
inline
179  { // try to lock non-exclusive
180  lock_guard<mutex> _Lock(_Mymtx);
181  if (_Writing || _Readers == _Max_readers)
182  return (false);
183  else
184  { // count another reader
185  ++_Readers;
186  return (true);
187  }
188  }
mutex _Mymtx
Definition: shared_mutex:248
bool _Writing
Definition: shared_mutex:251
Definition: mutex:182
static constexpr _Read_cnt_t _Max_readers
Definition: shared_mutex:91
_Read_cnt_t _Readers
Definition: shared_mutex:250
template<class _Rep , class _Period >
bool shared_timed_mutex::try_lock_shared_for ( const chrono::duration< _Rep, _Period > &  _Rel_time)
inline
194  { // try to lock non-exclusive for relative time
195  return (try_lock_shared_until(_Rel_time
197  }
bool try_lock_shared_until(const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: shared_mutex:216
static time_point now() _NOEXCEPT
Definition: chrono:997
template<class _Clock , class _Duration >
bool shared_timed_mutex::try_lock_shared_until ( const chrono::time_point< _Clock, _Duration > &  _Abs_time)
inline
218  { // try to lock non-exclusive until absolute time
219  return (_Try_lock_shared_until(_Abs_time));
220  }
bool _Try_lock_shared_until(_Time _Abs_time)
Definition: shared_mutex:200
bool shared_timed_mutex::try_lock_shared_until ( const xtime _Abs_time)
inline
223  { // try to lock non-exclusive until absolute time
224  return (_Try_lock_shared_until(_Abs_time));
225  }
bool _Try_lock_shared_until(_Time _Abs_time)
Definition: shared_mutex:200
template<class _Clock , class _Duration >
bool shared_timed_mutex::try_lock_until ( const chrono::time_point< _Clock, _Duration > &  _Abs_time)
inline
138  { // try to lock until time point
139  auto _Not_writing = [this] { return (!_Writing); };
140  auto _Zero_readers = [this] { return (_Readers == 0); };
141  unique_lock<mutex> _Lock(_Mymtx);
142 
143  if (!_Write_queue.wait_until(_Lock, _Abs_time, _Not_writing))
144  return (false);
145 
146  _Writing = true;
147 
148  if (!_Read_queue.wait_until(_Lock, _Abs_time, _Zero_readers))
149  { // timeout, leave writing state
150  _Writing = false;
151  _Lock.unlock(); // unlock before notifying, for efficiency
153  return (false);
154  }
155 
156  return (true);
157  }
Definition: mutex:258
mutex _Mymtx
Definition: shared_mutex:248
condition_variable _Read_queue
Definition: shared_mutex:249
void notify_all() _NOEXCEPT
Definition: mutex:558
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
_Cv_status wait_until(unique_lock< mutex > &_Lck, const chrono::time_point< _Clock, _Duration > &_Abs_time)
Definition: mutex:599
_Read_cnt_t _Readers
Definition: shared_mutex:250
void shared_timed_mutex::unlock ( )
inline
160  { // unlock exclusive
161  { // unlock before notifying, for efficiency
162  lock_guard<mutex> _Lock(_Mymtx);
163 
164  _Writing = false;
165  }
166 
168  }
mutex _Mymtx
Definition: shared_mutex:248
void notify_all() _NOEXCEPT
Definition: mutex:558
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
Definition: mutex:182
void shared_timed_mutex::unlock_shared ( )
inline
228  { // unlock non-exclusive
229  _Read_cnt_t _Local_readers;
230  bool _Local_writing;
231 
232  { // unlock before notifying, for efficiency
233  lock_guard<mutex> _Lock(_Mymtx);
234  --_Readers;
235  _Local_readers = _Readers;
236  _Local_writing = _Writing;
237  }
238 
239  if (_Local_writing && _Local_readers == 0)
241  else if (!_Local_writing && _Local_readers == _Max_readers - 1)
243  }
void notify_one() _NOEXCEPT
Definition: mutex:553
mutex _Mymtx
Definition: shared_mutex:248
condition_variable _Read_queue
Definition: shared_mutex:249
void notify_all() _NOEXCEPT
Definition: mutex:558
condition_variable _Write_queue
Definition: shared_mutex:249
bool _Writing
Definition: shared_mutex:251
unsigned int _Read_cnt_t
Definition: shared_mutex:90
Definition: mutex:182
static constexpr _Read_cnt_t _Max_readers
Definition: shared_mutex:91
_Read_cnt_t _Readers
Definition: shared_mutex:250

Member Data Documentation

constexpr _Read_cnt_t shared_timed_mutex::_Max_readers = _Read_cnt_t(-1)
staticprivate
mutex shared_timed_mutex::_Mymtx
private
condition_variable shared_timed_mutex::_Read_queue
private
_Read_cnt_t shared_timed_mutex::_Readers
private
condition_variable shared_timed_mutex::_Write_queue
private
bool shared_timed_mutex::_Writing
private

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