2012-05-02 22 views
14

¿Cuál es la razón por la cual is_lock_free requiere una instancia (es una función miembro)? ¿Por qué no una metafunción del tipo o una función miembro estática constexpr?¿Por qué is_lock_free es una función miembro?

Estoy buscando una instancia real de por qué es necesario.

+0

¿Se llama 'is_instance_free'? No. QED. –

+6

Parece que es por el rendimiento [cita de aquí] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html): 'La propuesta proporciona un servicio sin bloqueos funciones de consulta en objetos individuales en lugar de tipos enteros para permitir variables atómicas inevitablemente desalineadas sin penalizar el rendimiento de las variables atómicas alineadas' –

+2

@JesseGood que suena como una respuesta. ¿Por qué es un comentario? ;) –

Respuesta

23

El estándar permite que un tipo sea a veces sin cerradura.

sección 29.4

The Atomic _..._ macros LOCK_FREE-Lock en el alojamiento indican la propiedad libre de bloqueo de los correspondientes tipos atómicas, con las variantes con y sin signo agrupados. Las propiedades también se aplican a las correspondientes especializaciones (parciales) de la plantilla atómica. Un valor de 0 indica que los tipos nunca están bloqueados. Un valor de 1 indica que los tipos a veces están bloqueados. Un valor de 2 indica que los tipos están siempre libres de bloqueos.

Los estados C++ atomic paper n2427 la razón detrás:

... La propuesta ofrece funciones de consulta libre de bloqueo en tiempo de ejecución en lugar de tiempo de compilación constantes debido a las implementaciones posteriores de una plataforma pueden actualizar de bloqueo operaciones con operaciones sin bloqueos, así que es común que los sistemas abstraigan dichas instalaciones detrás de bibliotecas dinámicas , y deseamos dejar abierta esa posibilidad. Además, , recomendamos que las implementaciones sin soporte atómico de hardware usen esa técnica con . ...

Y también (como se señaló Jesse Good):

La propuesta ofrece funciones de consulta libre de bloqueo en objetos individuales en lugar de tipos enteros para permitir que las variables atómicas inevitablemente desalineados sin penalizar el rendimiento de variables atómicas alineadas

+0

He agregado en la otra cita para completar. – Pubby

+0

Claro. Esa parte también es relevante para tu pregunta. Me lo perdí. – user2k5

+0

También podría imaginar una implementación con un número fijo de valores atómicos o somesuch. – Yakk

Cuestiones relacionadas