pthread_attr_getguardsize o pthread_attr_setguardsize Subrutinas

Finalidad

Obtiene o establece el atributo guardsize de hebra.

Biblioteca

Biblioteca Threadslibthreads.a)

Sintaxis

#include <pthread.h>

int pthread_attr_getguardsize (attr, guardsize)
const pthread_attr_t *attr;
size_t *guardsize;

int pthread_attr_setguardsize (attr, guardsize)
pthread_attr_t *attr;
size_t guardsize;

Descripción

El atributo guardsize controla el tamaño del área de protección para la pila de la hebra creada. El atributo guardsize proporciona protección contra el desbordamiento del puntero de pila. Si se crea una pila de hebra con protección de protección, la implementación asigna memoria adicional en el extremo de desbordamiento de la pila como un almacenamiento intermedio contra el desbordamiento de pila del puntero de pila. Si una aplicación se desborda en este búfer, se produce un error (posiblemente en una señal SIGSEGV que se entrega a la hebra).

El atributo guardsize se proporciona a la aplicación por dos razones:

  • La protección de desbordamiento puede provocar potencialmente el despilfarro de recursos del sistema. Una aplicación que crea un gran número de hilos, y que sabe que sus hilos nunca desbordarán su pila, puede ahorrar recursos del sistema desactivando las áreas de guardia.
  • Cuando las hebras asignan grandes estructuras de datos en la pila, pueden ser necesarias grandes áreas de protección para detectar el desbordamiento de la pila.

La función pthread_attr_getguardsize obtiene el atributo guardsize del objeto attr . Este atributo se devuelve en el parámetro guardsize.

La función pthread_attr_setguardsize establece el atributo guardsize en el objeto attr . El nuevo valor de este atributo se obtiene a partir del parámetro guardsize. Si guardsize es cero, no se proporcionará un área de guardado para los hilos creados con attr. Si guardsize es mayor que cero, se proporciona un área de guardia de al menos tamaño guardsize bytes para cada hilo creado con attr.

Se permite que una implementación conforme redondee el valor contenido en guardsize a un múltiplo de la variable de sistema configurable PAGESIZE (véase sys/mman.h). Si una implementación redondea el valor de guardsize a un múltiplo de PAGESIZE, una llamada a ' pthread_attr_getguardsize ' especificando ' attr almacenará en el parámetro ' guardsize ' el tamaño de guarda especificado por la llamada anterior a la función ' pthread_attr_setguardsize. El valor predeterminado del atributo guardsize es PAGESIZE bytes. El valor real de PAGESIZE depende de la implementación y puede que no sea el mismo en todas las implementaciones.

Si se ha establecido el atributo stackaddr (es decir, el llamante está asignando y gestionando sus propias pilas de hebras), el atributo guardsize se ignora y la implementación no proporcionará ninguna protección. Es responsabilidad de la aplicación gestionar el desbordamiento de pila junto con la asignación y gestión de pila en este caso.

Parámetros

Elemento Descripción
attr Especifica el objeto de atributos de hebra.
tamañoGuard Controla el tamaño del área de protección para la pila de la hebra creada y protege contra el desbordamiento del puntero de pila.

Valores de retorno

Si tiene éxito, las funciones pthread_attr_getguardsize y pthread_attr_setguardsize devuelven cero. De lo contrario, se devuelve un número de error para indicar el error.

Códigos de error

Las funciones pthread_attr_getguardsize y pthread_attr_setguardsize fallarán si:

Elemento Descripción
EINVAL El atributo attr no es válido.
EINVAL El parámetro guardsize no es válido.
EINVAL El parámetro guardsize contiene un valor no válido.