std::shared_lock<Mutex>::shared_lock_C++中文网

shared_lock() noexcept;

(1) (C++14 起)

shared_lock( shared_lock&& other ) noexcept;

(2) (C++14 起)

explicit shared_lock( mutex_type& m );

(3) (C++14 起)

shared_lock( mutex_type& m, std::defer_lock_t t ) noexcept;

(4) (C++14 起)

shared_lock( mutex_type& m, std::try_to_lock_t t );

(5) (C++14 起)

shared_lock( mutex_type& m, std::adopt_lock_t t );

(6) (C++14 起)

template< class Rep, class Period >

shared_lock( mutex_type& m,

             const std::chrono::duration<Rep,Period>& timeout_duration );

(7) (C++14 起)

template< class Clock, class Duration >

shared_lock( mutex_type& m,

             const std::chrono::time_point<Clock,Duration>& timeout_time );

(8) (C++14 起)

构造 shared_lock ,可选地锁定提供的互斥。

1) 构造 shared_lock ,不关联互斥。

2) 移动构造函数。以 other 的内容初始化 shared_lock 。令 other 不关联到互斥。

3-8) 构造 shared_lock ,以 m 为关联的互斥。另外:

3) 通过调用 m.lock_shared() ,以共享模式锁定关联的互斥。若此线程已以任何模式占有互斥则行为未定义。

4) 不锁定关联的互斥。

5) 尝试通过调用 m.try_lock_shared() ,以共享模式锁定关联的互斥而不阻塞。若此线程已以任何模式占有互斥则行为未定义。

6) 假设调用方线程已以共享模式占有 m

7) 尝试通过调用 m.try_lock_shared_until(timeout_duration) ,以共享模式锁定关联的互斥,这会阻塞直到经过指定的 timeout_duration 或取得锁,两者的先到来者。可能锁定长于 timeout_duration 。若此线程已以任何模式占有互斥则行为未定义。

8) 尝试通过调用 m.try_lock_shared_for(timeout_time) ,以共享模式锁定关联的互斥,这会阻塞直到抵达指定的 timeout_time 或取得锁,两者的先到来者。可能锁定长于到抵达 timeout_time 为止。若此线程已以任何模式占有互斥则行为未定义。

参数

other - 以之初始化状态的另一 shared_lock
m - 关联到所的互斥,可选地获得其所有权
t - 用于选择不同锁定策略的标签参数
timeout_duration - 要阻塞的最大时长
timeout_time - 要阻塞到的最大时间点

示例