文章目录
std::timed_mutex
timed_mutex
功能与普通的mutex
类似,仅多了两个成员函数try_lock_for
和try_lock_until
。
构造函数
constexpr timed_mutex() noexcept;
timed_mutex (const timed_mutex&) = delete;
新构造的对象处于未上锁状态,不支持拷贝和移动操作。
析构函数
~timed_mutex();
销毁构造的对象,若对象处于上锁状态,会导致undefined behavior。
timed_mutex::lock
void lock();
对构造的对象上锁。
若对象还未被任何线程锁住,则调用线程对其上锁;
若对象已经被其他线程锁住,则阻塞调用线程;
若对象已经被调用线程锁住,则再次对其上锁会导致死锁。
timed_mutex::try_lock
bool try_lock();
若构造的对象处于未上锁状态,则调用线程对其上锁,该函数返回true
;
若构造的对象处于上锁状态,则该函数返回false
,但不会阻塞调用线程。
若对象已被调用线程锁住,则再次对其上锁或导致死锁。
timed_mutex::try_lock_for
template <class Rep, class Period>
bool try_lock_for (const chrono::duration<Rep,Period>& rel_time);
若构造的对象未被任何线程锁住,则调用线程将对其上锁,该函数返回true
;
若构造的对象已经被其他线程锁住,则调用线程将被阻塞至多rel_time
的时间;若在rel_time
时间内,对象被解锁,则调用线程将解除阻塞状态,并继续运行;否则,调用线程将被阻塞rel_time
时间。该函数返回false
。
若构造的对象已经被调用线程上锁,则再次对其上锁会导致死锁。
timed_mutex::try_lock_until
template <class Clock, class Duration>
bool try_lock_until (const chrono::time_point<Clock,Duration>& abs_time);
功能与try_lock_for
一样,但需要指定一个绝对时间,而后者需要指定一个相对时间。
timed_mutex::unlock
解锁,释放对其所有权。
若对象当前未被调用线程上锁,将导致undefined behavior
。
timed_mutex::native_handle
native_handle_type native_handle();