Namespaces
Variants

Standard library header <shared_mutex> (C++14)

From cppreference.net
Standard library headers

이 헤더는 스레드 지원 라이브러리의 일부입니다.

목차

클래스

공유 상호 배제 기능을 제공함
(클래스)
공유 상호 배제 기능을 제공하고 타임아웃으로 잠금을 구현함
(클래스)
이동 가능한 공유 뮤텍스 소유권 래퍼를 구현함
(클래스 템플릿)

함수

std::swap 알고리즘을 특수화함
(함수 템플릿)

시놉시스

namespace std {
  class shared_mutex;
  class shared_timed_mutex;
  template<class Mutex> class shared_lock;
  template<class Mutex>
    void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept;
}

클래스 std::shared_mutex

namespace std {
  class shared_mutex {
  public:
    shared_mutex();
    ~shared_mutex();
    shared_mutex(const shared_mutex&) = delete;
    shared_mutex& operator=(const shared_mutex&) = delete;
    // 배타적 소유권
    void lock();                // 블로킹 방식
    bool try_lock();
    void unlock();
    // 공유 소유권
    void lock_shared();         // 블로킹 방식
    bool try_lock_shared();
    void unlock_shared();
    using native_handle_type = /* implementation-defined */;
    native_handle_type native_handle();
  };
}

클래스 std::shared_timed_mutex

namespace std {
  class shared_timed_mutex {
  public:
    shared_timed_mutex();
    ~shared_timed_mutex();
    shared_timed_mutex(const shared_timed_mutex&) = delete;
    shared_timed_mutex& operator=(const shared_timed_mutex&) = delete;
    // 배타적 소유권
    void lock();                // 블로킹 방식
    bool try_lock();
    template<class Rep, class Period>
      bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
    template<class Clock, class Duration>
      bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
    void unlock();
    // 공유 소유권
    void lock_shared();         // 블로킹 방식
    bool try_lock_shared();
    template<class Rep, class Period>
      bool try_lock_shared_for(const chrono::duration<Rep, Period>& rel_time);
    template<class Clock, class Duration>
      bool try_lock_shared_until(const chrono::time_point<Clock, Duration>& abs_time);
    void unlock_shared();
  };
}

클래스 템플릿 std::shared_lock

namespace std {
  template<class Mutex>
  class shared_lock {
  public:
    using mutex_type = Mutex;
    // 생성/복사/소멸
    shared_lock() noexcept;
    explicit shared_lock(mutex_type& m);        // 블로킹 방식
    shared_lock(mutex_type& m, defer_lock_t) noexcept;
    shared_lock(mutex_type& m, try_to_lock_t);
    shared_lock(mutex_type& m, adopt_lock_t);
    template<class Clock, class Duration>
      shared_lock(mutex_type& m, const chrono::time_point<Clock, Duration>& abs_time);
    template<class Rep, class Period>
      shared_lock(mutex_type& m, const chrono::duration<Rep, Period>& rel_time);
    ~shared_lock();
    shared_lock(const shared_lock&) = delete;
    shared_lock& operator=(const shared_lock&) = delete;
    shared_lock(shared_lock&& u) noexcept;
    shared_lock& operator=(shared_lock&& u) noexcept;
    // 잠금 관리
    void lock();                                // 블로킹 방식
    bool try_lock();
    template<class Rep, class Period>
      bool try_lock_for(const chrono::duration<Rep, Period>& rel_time);
    template<class Clock, class Duration>
      bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time);
    void unlock();
    // 수정자
    void swap(shared_lock& u) noexcept;
    mutex_type* release() noexcept;
    // 관찰자
    bool owns_lock() const noexcept;
    explicit operator bool () const noexcept;
    mutex_type* mutex() const noexcept;
  private:
    mutex_type* pm;                             // 설명 전용
    bool owns;                                  // 설명 전용
  };
  template<class Mutex>
    void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept;
}