33 Thread support library [thread]

33.4 Mutual exclusion [thread.mutex]

33.4.4 Locks [thread.lock]

33.4.4.4 Class template shared_­lock [thread.lock.shared]

33.4.4.4.1 shared_­lock constructors, destructor, and assignment [thread.lock.shared.cons]

shared_lock() noexcept;

Effects: Создает объект типа shared_­lock.

Postconditions: pm == nullptr и owns == false.

explicit shared_lock(mutex_type& m);

Requires: Вызывающий поток не владеет мьютексом ни в каком режиме владения.

Effects: Создает объект типа shared_­lock и вызывает m.lock_­shared().

Postconditions: pm == addressof(m) и owns == true.

shared_lock(mutex_type& m, defer_lock_t) noexcept;

Effects: Создает объект типа shared_­lock.

Postconditions: pm == addressof(m) и owns == false.

shared_lock(mutex_type& m, try_to_lock_t);

Requires: Вызывающий поток не владеет мьютексом ни в каком режиме владения.

Effects: Создает объект типа shared_­lock и вызывает m.try_­lock_­shared().

Postconditions: pm == addressof(m) и owns == res где res значение, возвращаемое вызовом m.try_­lock_­shared().

shared_lock(mutex_type& m, adopt_lock_t);

Requires: Вызывающий поток имеет совместное владение мьютексом.

Effects: Создает объект типа shared_­lock.

Postconditions: pm == addressof(m) и owns == true.

template <class Clock, class Duration> shared_lock(mutex_type& m, const chrono::time_point<Clock, Duration>& abs_time);

Requires: Вызывающий поток не владеет мьютексом ни в каком режиме владения.

Effects: Создает объект типа shared_­lock и вызывает m.try_­lock_­shared_­until(abs_­time).

Postconditions: pm == addressof(m) и owns == res где res значение, возвращаемое вызовом m.try_­lock_­shared_­until(abs_­time).

template <class Rep, class Period> shared_lock(mutex_type& m, const chrono::duration<Rep, Period>& rel_time);

Requires: Вызывающий поток не владеет мьютексом ни в каком режиме владения.

Effects: Создает объект типа shared_­lock и вызывает m.try_­lock_­shared_­for(rel_­time).

Postconditions: pm == addressof(m) и owns == res где res значение, возвращаемое вызовом m.try_­lock_­shared_­for(rel_­time).

~shared_lock();

Effects: Если owns звонит pm->unlock_­shared().

shared_lock(shared_lock&& sl) noexcept;

Postconditions: pm == sl_­p.pm и owns == sl_­p.owns (где sl_­p - состояние sl непосредственно перед этой конструкцией), sl.pm == nullptr и sl.owns == false.

shared_lock& operator=(shared_lock&& sl) noexcept;

Effects: Если owns звонит pm->unlock_­shared().

Postconditions: pm == sl_­p.pm и owns == sl_­p.owns (где sl_­p - состояние sl непосредственно перед этим назначением), sl.pm == nullptr и sl.owns == false.