es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementación de contador local de hilos en C++

Quiero implementar un contador de alto rendimiento en un proceso de múltiples hilos. Cada hilo tendrá un contador local de hilo llamado “t_counter” para contar las consultas (aumentar en 1/cada consulta) y en el hilo del “temporizador” habrá un contador llamado “global_counter”. Lo que quiero es que cada segundo, global_counter obtenga el valor de cada t_counter(s) y los añada a global_counter, pero no sé cómo obtener el valor de cada t_counter en el “hilo del temporizador”. Además, en qué sección de la memoria principal se encuentra el valor local del hilo? .data o heap u otra? ¿Cómo asignar de manera dinámica el tamaño de memoria (puede haber 10 hilos o 100 hilos)? ¿Y x86-64 utiliza un registro de segmento para almacenar dicho valor?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para implementar un contador de alto rendimiento en un proceso de múltiples hilos utilizando variables locales de hilo, puedes asignar a cada hilo su propia variable de contador llamada “t_counter” utilizando la palabra clave thread_local en C++. Esto asegurará que cada hilo tenga su propia instancia separada y distintiva de la variable de contador, la cual no interferirá con los contadores de otros hilos.

    Para calcular el contador global, necesitas acceder a cada uno de los t_counters y sumar sus valores al contador global cada segundo. Una forma de lograr esto es utilizando un hilo temporizador que se ejecute cada segundo, y lea los valores de los t_counters de todos los hilos y los sume al contador global. Para acceder al valor de cada t_counter en el hilo temporizador, puedes utilizar una estructura de datos para almacenar los punteros a todos los t_counters, e iterar sobre ellos para leer sus valores.

    Las variables locales de hilo pueden ubicarse en varias secciones de la memoria principal dependiendo de la implementación. En general, las variables locales de hilo se almacenan en un bloque de memoria separado conocido como el área de almacenamiento local de hilos (TLS, por sus siglas en inglés), que es distinto del montón (heap) o la sección .data. TLS es una implementación específica de la plataforma, y su tamaño puede determinarse en tiempo de ejecución utilizando la función GetThreadLocalStorageSize en Windows o pthread_attr_getstacksize en sistemas basados en Unix.

    La arquitectura x86-64 utiliza un registro dedicado, %fs o %gs, para almacenar la dirección base del almacenamiento local de hilos. Las variables locales de hilo se acceden utilizando desplazamientos desde la dirección base almacenada en estos registros de segmento.

Comments are closed.