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に繰り越されることになっていました。
参照
- N3961: A proposal to add
shared_mutex
(untimed) - N3995: A proposal to add
shared_mutex
(untimed) (Revision 2) - N4241: A proposal to add
shared_mutex
(untimed) (Revision 3) - N4508: A proposal to add
shared_mutex
(untimed) (Revision 4)
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。