C++多线程编程之timed_mutex

参考www.cplusplus.com

std::timed_mutex

timed_mutex功能与普通的mutex类似,仅多了两个成员函数try_lock_fortry_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();
shared_timed_mutexC++标准库中的一种锁类型,它是std::shared_mutex的一种变体。与std::shared_mutex相比,shared_timed_mutex提供了带有时间限制的锁定操作,类似于std::timed_mutex。\[2\]这意味着线程可以尝试在一定时间内获取shared_timed_mutex的锁,如果超过了指定的时间仍未获取到锁,则可以选择放弃或进行其他处理。 std::shared_mutex通常用于多个读线程可以同时访问同一资源而不导致数据竞争,但只有一个写线程能访问的情况。\[3\]它提供了两种锁定操作:lock_shared()用于读取共享数据,而lock()用于写入共享数据。当有一个写线程调用lock()时,所有的读线程都会等待该写线程释放锁。这种机制可以有效地保护共享数据的一致性。 需要注意的是,由于其额外的复杂性,std::shared_mutex和std::shared_timed_mutex相对于普通锁std::mutex和std::timed_mutex的使用情况比较少见。但在某些特定的场景下,它们确实是有用的。\[1\]如果你需要在多个读线程和一个写线程之间进行同步,并且需要支持带有时间限制的锁定操作,那么可以考虑使用shared_timed_mutex。 #### 引用[.reference_title] - *1* *2* *3* [C++ 多线程:互斥量(mutex)](https://blog.csdn.net/iuices/article/details/123099747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值