Bonjour,
je programme une application qui lance plusieurs threads,
Les threads partagent une variable globale, en l'occurence, une grosse structure avec énormément de champ de toute sorte à l'intérieur.
Chaque thread accède en lecture ou en écriture aux champs de la structure mais rarement aux meme en meme temps et encore moins en lecture ou en écriture en meme temps.
Donc pour éviter les accès simultanées à ma structure partagée, j'ai utilisé qu'un seul verrou et je l'utilise pour vérouiller chaque section du thread qui accède a ma structure, peu importe le champ.
Donc je me pose des questions, initialement sans utiliser les verrous,
est ce que deux threads qui essayent de lire ou écrire deux champs different d'une meme structure pose problème ? ou ce n'est le cas que lorsque exactement la meme variable de la structure est accedé par plusieurs threads ?
Et pareil si un thread accède à l'indice 7 d'un tableau (tab[7]) et un autre accède au meme tableau mais d'indice différent (tab[8]) est ce que cela pose problème ?
Et donc en fonction, comment gérer cela,
créer un seul verrou pour toute la structure ? meme si ce n'est pas la meme variable de la structure qui est atteinte en meme temps ? les threads vont alors souvent perdre du temps à attendre. Ou alors créer un verrou pour chaque champ de ma structure ? certainement un gain de temps mais pas forcément très simple à gerer au niveau du code ?
Dernière chose, toujours théorique, je débute, je programme avec la librairie pthread, est ce que la création d'un mutex suffit pour résoudre le problème des "race conditions" & autres, ou comme il me semble l'avoir lu, il faut aussi ajouter des conditions (pthread_cond_t), or il me semble que celles ci ne servent qu'a synchroniser les threads, si l'ordre d'execution des threads m'importe peu et que je ne les synchronise pas suis-je quand meme à l'abri de toutes sortes de bugs et plantages (si on suppose que le code mis a part la gestion des threads, est niquel) ?
Merci à vous.
Partager