std::scoped_lock<MutexTypes...>::scoped_lock
< cpp | thread | scoped lock
explicit scoped_lock( MutexTypes&... m ); |
(1) | (C++17 起) |
scoped_lock( std::adopt_lock_t, MutexTypes&... m ); |
(2) | (C++17 起) |
scoped_lock( const scoped_lock& ) = delete; |
(3) | (C++17 起) |
取得给定互斥 m
的所有权。
1) 若 sizeof...(MutexTypes) == 0 则不做任何事。否则若 sizeof...(MutexTypes) == 1 ,则等效地调用 m.lock() 。否则,等效地调用 std::lock(m...) 。若
MutexTypes
之一不是递归互斥,且当前线程已占有 m... 中对应的参数,则行为未定义。2) 取得互斥 m... 的所有权而不试图锁定任何互斥。除非当前线程已占有
m...
中所有互斥,否则行为未定义。3) 复制构造函数被删除。
若 m
在 scoped_lock
对象之前被销毁,则行为未定义。
参数
m | - | 要获得其所有权的互斥 |
异常
1) 抛出任何 m.lock() 所抛的异常
2) 不抛出
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0739R0 | C++17 | adopt_lock_t 参数在最后,妨碍类模板实参推导
|
移到最前 |