public member function
<mutex>

std::timed_mutex::lock

void lock();
锁定 timed mutex
调用线程锁定 timed_mutex,如果需要则阻塞(行为与 mutex 完全相同)。

  • 如果 timed_mutex 当前未被任何线程*锁定*,则调用线程*锁定*它(从此刻起,直到调用其成员函数 unlock,该线程*拥有* timed_mutex)。
  • 如果 timed_mutex 当前被另一个线程锁定,则调用线程的执行将被阻塞,直到被另一个线程*解锁*(其他未锁定的线程将继续执行)。
  • 如果 timed_mutex 当前被调用此函数的同一线程锁定,则会产生*死锁*(具有*未定义行为*)。有关允许同一线程进行多次锁定的* timed mutex 类型*,请参阅 recursive_timed_mutex

timed_mutex 的所有*锁定*和*解锁*操作遵循单一的总顺序,所有*可见效果*都在*锁定操作*和同一对象上的先前* 解锁操作*之间同步。

请注意,不同并发*锁定*被调度返回的顺序是不确定的,不一定与它们被锁定的顺序相关(取决于系统和库实现)。

参数



返回值



数据竞争

timed_mutex 对象被修改为*原子操作*(不会导致数据竞争)。

异常安全

基本保证:如果此成员函数抛出异常,则 timed_mutex 对象仍处于有效状态。此外,发起调用抛出异常的线程不会获得锁。
如果 timed_mutex 已被当前线程锁定,调用此函数会导致死锁(*未定义行为*):在某些库实现中,这会导致函数失败。

如果调用失败,将抛出system_error 异常
异常类型错误条件描述
system_errorerrc::resource_deadlock_would_occur检测到死锁(实现可能会检测到某些死锁情况)。
system_errorerrc::operation_not_permitted线程没有执行该操作的权限。
system_errorerrc::device_or_resource_busy正在操作的*原生句柄类型*已被锁定。
根据库实现的不同,此成员函数还可能抛出异常来报告其他情况。

另见