Почему shared_timed_mutex определен в С++ 14, но shared_mutex в С++ 17?

С++ 11 представил std::mutex и его расширенную версию - std::timed_mutex.

Однако в С++ 14 мы имеем std::shared_timed_mutex, но его родительский элемент std::shared_mutex будет добавлен в С++ 17.

Есть ли разумное объяснение этому?

Если я не буду использовать "timed" функциональность std::shared_timed_mutex, будет ли это хуже (медленнее, потребляя больше ресурсов), чем предлагаемый std::shared_mutex?

Ответы

Ответ 1

Общие мьютексы первоначально имели время в нем и назывались shared_mutex.

Разработчик (msvc iirc) отметил, что они могут реализовать его "дешевле" без времени. В частности, SRWLOCK - это существующий примитив на окнах, который достаточен для реализации совместного мьютекса, но при необходимости времени требуется дополнительное оборудование. (Via @t.c.). (Тем не менее, я считаю, что это не просто проще, потому что уже написано, но и существенно дороже, хотя бы на x86/64-окошках)

Слишком поздно добавлять новый стандарт к стандарту, но не слишком поздно переименовывать его.

Итак, он был переименован в shared_timed_mutex, а версия untimed добавлена ​​в следующий стандарт.

Здесь есть хотя бы одна из документов, связанных с переименованием.

Мы предлагаем переименовать shared_mutex в shared_timed_mutex:

(a) для согласованности с другими мьютексами (исправление несогласованности имен);

(b) оставить место для shared_mutex, которое может быть более эффективным на некоторых платформах, чем shared_timed_mutex.