Este es el comando rrdthreads que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
rrdthreads: disposiciones para vincular la biblioteca RRD para su uso en programas multiproceso
SINOPSIS
El uso de librrd en programas multiproceso requiere algunas precauciones adicionales, ya que el RRD
la biblioteca en su forma original no era segura para subprocesos en absoluto. Este documento describe
requisitos y trampas en la forma de utilizar la versión multiproceso de librrd en su
propios programas. También da pistas para el desarrollo futuro de RRD para mantener el hilo de la biblioteca
segura.
Actualmente, solo algunas operaciones RRD se implementan de forma segura para subprocesos. Todos terminan en
el sufijo habitual "" _r "".
DESCRIPCIÓN
Para utilizar librrd en programas de subprocesos múltiples, debe:
· Vincular con biblioteca_th en lugar de biblioteca (use "-lrrd_th" al vincular)
· Utilice las funciones "" _r "" en lugar de las funciones API normales
· No utilice ninguna especificación de tiempo al estilo. Analizar estas especificaciones de tiempo es
terriblemente no seguro para subprocesos.
· Nunca use funciones que no sean * "_ r" a menos que esté explícitamente documentado que la función es
seguro para la pisada.
· Cada hilo DEBE llamar a "rrd_get_context ()" antes de su primera llamada a cualquier "librrd_th"
función para configurar datos específicos del hilo. Esto no es estrictamente necesario, pero
es la única forma de probar si esta función puede realizar la asignación de memoria.
De lo contrario, el programa puede morir con un SIGSEGV en una situación de poca memoria.
· Siempre llame a "rrd_error_clear ()" antes de cualquier llamada a la biblioteca. De lo contrario, la llamada
puede fallar debido a algún error anterior.
NOTAS PARA RRD COLABORADORES
Se deben seguir algunas precauciones al desarrollar RRD a partir de ahora:
· Utilice únicamente funciones seguras para subprocesos en el código de la biblioteca. Muchas funciones de libc de uso frecuente no son
a salvo de amenazas. Tenga cuidado en las siguientes situaciones o cuando utilice la siguiente biblioteca
funciones:
· Deben evitarse las llamadas directas a "strerror ()": utilice "rrd_strerror ()" en su lugar,
proporciona un mensaje de error por hilo.
· Las familias de funciones "getpw *", "getgr *", "gethost *" (y algunas más "get *"
funciones) no son seguras para subprocesos: utilice las variantes * "_ r"
· Funciones de tiempo: "asctime", "ctime", "gmtime", "localtime": usa variantes * "_ r"
· "Strtok": use "strtok_r"
· "Tmpnam": use "tmpnam_r"
· Muchos otros (búsqueda de documentación)
· Un archivo de encabezado llamado rrd_is_thread_safe.h se proporciona que funciona con GNU
C-preprocesador para "envenenar" algunas de las funciones no seguras para subprocesos más comunes utilizando el
Directiva "#pragma GCC veneno". Simplemente incluya este encabezado en los archivos fuente que desee
Manténgase seguro para subprocesos.
· ¡No introduzca variables globales!
Si realmente tiene que usar una variable global, puede agregar un nuevo campo al
estructura "rrd_context" y modificar rrd_error.c, rrd_thread_safe.c y
rrd_non_thread_safe.c
· No utilice "getopt" o "getopt_long" en * "_ r" (ni directa ni indirectamente).
"getopt" utiliza variables globales y se comporta mal en una aplicación multiproceso cuando
llamado al mismo tiempo. En su lugar, proporcione una función * _r tomando todas las opciones como función
parámetros. Puede proporcionar argumentos argc y ** argv para argumentos de longitud variable
liza. Consulte "rrd_update_r" como ejemplo.
· ¡No utilice la función "rrd_parsetime"!
Utiliza muchas variables globales. Puede utilizarlo en funciones no diseñadas para
seguro para subprocesos, como en las funciones que envuelven la versión "_r" de alguna operación (por ejemplo,
"rrd_create", pero no en "rrd_create_r")
ACTUALMENTE IMPLEMENTADO HILO SEGURA Las funciones
Actualmente existen variantes seguras para subprocesos de "rrd_update", "rrd_create", "rrd_dump",
"rrd_info", "rrd_last" y "rrd_fetch".
Use rrdthreads en línea usando los servicios de onworks.net