Bibliothèque "thread-safe"

Le problème exposé dans ce sujet a été résolu.

Ce terme signifie que si ton programme a plusieurs thread et que chacun d’eux font un appel simultané à des fonctions de la bibliothèque, le résultat obtenu sera celui attendu à savoir une réponse correcte à chacun des appels.

Certaines bibliothèques ont des états internes, ou doivent gérer des ressources (notamment matérielles) et en cas d’appel conjoint, l’état interne pourrait être corrompu, ou la ressource partagée recevra des ordres conflictuels qu’elle ne pourra gérer convenablement.

Dans le cas d’une bibliothèque non thread safe, soit tu dois protéger les appels à la bibliothèque (via un mutex par exemple) ou t’assurer qu’un seul thread est responsable de communiquer avec la bibliothèque.

Question d’architecture donc.

+5 -0

Quels sont exactement les problèmes que l’on peut rencontrer lorsque l’on travaille avec les threads ?

Il n’y en a qu’un seul, massif, dont découle tous les autres : les threads peuvent se marcher sur les pieds en accédant à une ressource partagée, il est très difficile de prévoir tous les cas possibles (tous les ordres conflictuels possibles) qui peuvent se produire sur une bibliothèque donnée dans un contexte multithread, et souvent le "remède" à ces accès partagés (mutexes et autres structures de synchronisation) a lui-même un coût en intelligibilité du code d’une part, et en perfs d’autre part.

Pour cette raison beaucoup de bibliothèques prennent le parti de dire "on ne cherchera pas à résoudre ce problème, débrouillez-vous pour que seul un thread soit responsable de cette donnée/cet état de la bibliothèque".

C’est un parti pris qui peut sembler un peu stupide à première vue, mais qu’on trouve de plus en plus sage chaque fois qu’on se fait couillonner par une race condition.

+1 -0

Quels sont exactement les problèmes que l’on peut rencontrer lorsque l’on travaille avec les threads ?

Lorsque tu as une ressource partagée avec plusieurs threads tu peux te retrouver dans des situations de :
- Dead lock : La ressource n’est jamais libéré par un thread.(Ce problème peut arriver dans différents cas)
- De famine : La ressource est monopolisée par un thread en particulier , et les autres threads n’ont donc quasiment jamais accès à la ressource

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte