Bueno, para empezar, el código con threadvar
es una sintaxis no válida. Un threadvar
necesita tener alcance de unidad en vez de alcance local.
variable local
Cada invocación (incluso de diferentes hilos y llamadas reentrantes) de una función da lugar a diferentes instancias de las variables locales de esa función.
de rosca variable local
Un hilo variable local tiene instancias separadas para cada hilo en el proceso. Hay una correspondencia de uno a uno entre las instancias de la variable y los hilos.
Discusión
Si el procedimiento no es re-entrante, y es el único procedimiento que se refiere a la variable entonces no habrá ninguna diferencia semántica entre una variable local y una threadvar
- pero si un local de variable se puede utilizar, entonces debería ser.
En términos de rendimiento, el threadvar
es más lento que una variable local y puede que ni siquiera funcione en el contexto de una DLL.
Mi recomendación es usar una variable local siempre que sea posible. Use un threadvar
(o Thread Local Storage (TLS) cuando esté en una DLL) si necesita una variable de alcance global que tenga una sola instancia por subproceso. Sin embargo, tal necesidad es rara y tiene la desventaja severa de que las variables locales de subprocesos tienen muchos de los mismos inconvenientes que las verdaderas variables globales.
nunca he visto un threadvar declarada dentro de una función. ¿Eso incluso compila? – CodesInChaos
bueno, ahí tienes. – rossmcm