Pueden combinarse estática ser utilizado como un marcador de posición para thread_local?
-
27-09-2019 - |
Pregunta
C ++ 0x agrega un nuevo almacenamiento especificador thread_local
que aún no está implementado en VS10.
Sin embargo, la programación paralela Biblioteca define un Concurrency::combinable
clase que tiene una función local()
que Devuelve una referencia a la rosca-privada sub-cálculo .
¿Hay semántica para thread_local
que no puede ser (fácilmente) cubiertas por tener una variable de tipo static
combinable<T>
?
Si no es lo que fue thread_local
añadido a la lengua de la base si se puede implementar en una biblioteca?
Solución
¿Por qué C ++ añadido class los objetos si podría ser implementado por una biblioteca como algo que GObject hace en C? Debido a que C ++ quiere class objetos a ser conocido en tiempo de compilación , esto es más eficiente. Por lo tanto C ++ inicialización de la clase / desinicialización es excepción-safe ( RAII ).
Algunas de las características son más importantes y más necesarios aplicación a realizar. thread_local es un especificador de clase de almacenamiento , por lo que puede ser conocido a tiempo de compilación y el compilador puede hacer mucho más de optimización.
También en http: // www .open-std.org / JTC1 / SC22 / WG21 / docs / documentos / 2008 / n2659.htm han dicho:
Tema variable dinámica de inicialización
En la actualidad, todas las implementaciones de almacenamiento local de subprocesos hacen no apoyar initalization dinámico (y destructores presumiblemente no triviales). Hubo consenso leve en el Mont Treblant cumplir para apoyar inicialización dinámica de las variables de función local de subproceso local. La inicialización de tales variables ya esté vigilado y sincrónica, por lo que no se requiere nueva tecnología. Por otro lado, la aplicación de inicialización dinámica de las variables de espacio de nombres de alcance es mucho más difícil y puede requerir enlazador adicional y soporte del sistema operativo .
¿Por qué thread_local
se han introducido como una nueva palabra clave lenguaje? Parece que la razón podría ser Tema variable dinámica de inicialización .