Il s'agit de la commande rrdthreads qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
rrdthreads - Dispositions pour lier la bibliothèque RRD à utiliser dans des programmes multi-threads
SYNOPSIS
L'utilisation de librrd dans des programmes multi-thread nécessite quelques précautions supplémentaires, car le RRD
la bibliothèque dans sa forme originale n'était pas du tout thread-safe. Ce document décrit
exigences et pièges sur la façon d'utiliser la version multithread de librrd dans votre
propres programmes. Il donne également des conseils pour le développement futur de RRD afin de garder le thread de la bibliothèque-
sûr.
Actuellement, seules certaines opérations RRD sont implémentées de manière thread-safe. Ils se terminent tous par
le suffixe habituel ""_r"".
DESCRIPTION
Pour utiliser librrd dans des programmes multithreads, vous devez :
· Lier avec librrd_th au lieu de bibliothèque (utilisez "-lrrd_th" lors de la liaison)
· Utilisez les fonctions ""_r"" au lieu des fonctions API normales
· N'utilisez aucune spécification de temps de style. L'analyse de telles spécifications de temps est
terriblement non-thread-safe.
· N'utilisez jamais de fonctions autres que *"_r" sauf s'il est explicitement documenté que la fonction est
sans danger pour la marche.
· Chaque thread DEVRAIT appeler "rrd_get_context()" avant son premier appel à n'importe quel "librrd_th"
fonction afin de configurer des données spécifiques au thread. Ce n'est pas strictement obligatoire, mais
c'est le seul moyen de tester si l'allocation de mémoire peut être effectuée par cette fonction.
Sinon, le programme peut mourir avec un SIGSEGV dans une situation de mémoire faible.
· Appelez toujours "rrd_error_clear()" avant tout appel à la bibliothèque. Sinon l'appel
peut échouer en raison d'une erreur antérieure.
NOTES POUR DRR CONTRIBUTEURS
Certaines précautions doivent être suivies lors du développement de RRD à partir de maintenant :
· Utilisez uniquement des fonctions thread-safe dans le code de la bibliothèque. De nombreuses fonctions libc souvent utilisées ne sont pas
thread-safe. Faites attention dans les situations suivantes ou lorsque vous utilisez la bibliothèque suivante
les fonctions:
· Les appels directs à "strerror()" doivent être évités : utilisez plutôt "rrd_strerror()"
fournit un message d'erreur par thread.
· Les familles de fonctions "getpw*", "getgr*", "gethost*" (et quelques autres "get*"
fonctions) ne sont pas thread-safe : utilisez les variantes *"_r"
· Fonctions temporelles : "asctime", "ctime", "gmtime", "localtime" : utilisez les variantes *"_r"
· "strtok": utilisez "strtok_r"
· "tmpnam": utilisez "tmpnam_r"
· Beaucoup d'autres (documentation de recherche)
· Un fichier d'en-tête nommé rrd_is_thread_safe.h est fourni qui fonctionne avec le GNU
préprocesseur C pour « empoisonner » certaines des fonctions non thread-safe les plus courantes en utilisant le
Directive "#pragma GCC poison". Incluez simplement cet en-tête dans les fichiers source que vous souhaitez
garder thread-safe.
· N'introduisez pas de variables globales !
Si vous devez vraiment, vraiment utiliser une variable globale, vous pouvez ajouter un nouveau champ au
structure "rrd_context" et modification erreur_rrd.c, rrd_thread_safe.c et votre
rrd_non_thread_safe.c
· N'utilisez pas "getopt" ou "getopt_long" dans *"_r" (ni directement ni indirectement).
"getopt" utilise des variables globales et se comporte mal dans une application multi-thread lorsque
appelé simultanément. Au lieu de cela, fournissez une fonction *_r prenant toutes les options comme fonction
paramètres. Vous pouvez fournir des arguments argc et **argv pour un argument de longueur variable
listes. Voir "rrd_update_r" comme exemple.
· N'utilisez pas la fonction "rrd_parsetime" !
Il utilise beaucoup de variables globales. Vous pouvez l'utiliser dans des fonctions non conçues pour être
thread-safe, comme dans les fonctions enveloppant la version "_r" d'une opération (par exemple,
"rrd_create", mais pas dans "rrd_create_r")
ACTUELLEMENT MIS EN ŒUVRE FIL SÉCURITÉ FONCTIONS
Il existe actuellement des variantes thread-safe de "rrd_update", "rrd_create", "rrd_dump",
"rrd_info", "rrd_last" et "rrd_fetch".
Utiliser les rrdthreads en ligne à l'aide des services onworks.net