c++ c++14 std c++17

¿Por qué shared_timed_mutex se define en c++ 14, pero shared_mutex en c++ 17?



llvm 4.0 3 (1)

C ++ 11 introdujo std::mutex y su versión extendida - std::timed_mutex .

Sin embargo, en c ++ 14 tenemos std::shared_timed_mutex , pero su ''padre'', el std::shared_mutex se agregará en c ++ 17.

¿Hay alguna explicación razonable para eso?

Si no voy a usar la funcionalidad ''cronometrada'' de std::shared_timed_mutex , ¿va a ser peor (más lento, consumiendo más recursos) que el std::shared_mutex propuesto?


El mutex compartido originalmente tenía tiempo en él, y se llamaba shared_mutex .

Un implementador (msvc iirc) señaló que podrían implementarlo "más barato" sin tiempo. En particular, SRWLOCK es una primitiva existente en Windows que es suficiente para implementar la SRWLOCK compartida, pero el tiempo requiere una maquinaria adicional. (Via @tc). (Sin embargo, creo que no solo es más fácil porque ya está escrito, sino que también es fundamentalmente más caro, al menos en ventanas x86 / 64)

Era demasiado tarde para agregar un nuevo tipo al estándar, pero no demasiado tarde para cambiarle el nombre.

Así que se cambió el nombre a shared_timed_mutex , y la versión sin hora se agregó en el siguiente estándar.

Here está al menos uno de los papeles involucrados en el cambio de nombre.

Proponemos cambiar el nombre de shared_mutex a shared_timed_mutex:

(a) por coherencia con las otras exclusiones mutuas (corrección de inconsistencias en la denominación);

(b) dejar espacio para un shared_mutex que puede ser más eficiente en algunas plataformas que shared_timed_mutex.