C++1z shared_mutex

C++14では、Readers-writerパターンという、読み込み操作が多い状況で使うミューテックスとして、std::shared_timed_mutexクラスが導入されました。

C++1zでは、タイムアウト付きロック取得機能がないクラスとして、shared_mutexクラスが導入されます。

// <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();

        // OSが持っているミューテックスの機能を直接使うときのためのネイティブハンドル
        typedef implementation-defined native_handle_type;
        native_handle_type native_handle();
    };
}

経緯として、C++14ではshared_mutex入る予定でしたが、その定義がタイムアウト付きロック取得の機能を持っているものであったため、shared_timed_mutexという名前で導入されていました。その後、タイムアウト付きロック取得がないshared_mutexも改めて導入しようという話になっていましたが、C++14には間に合わず、C++1zに繰り越されることになっていました。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。