2011-06-13 3 views
0

J'ai une matrice globale (type vecteur < vector < char>>) et j'ai besoin de plusieurs threads pour pouvoir y écrire comme je l'ai dit. Au début, je pensais n'utiliser qu'un seul mutex, parce que j'ai peur de l'état de la course (accès + écriture peut ne pas être atomique) Puis j'ai utilisé une matrice de mutex. Je ne suis pas tout à fait sûr à ce sujet. Il semble que ce soit le même problème.Comment les threads peuvent écrire dans différentes cellules d'une matrice

Pouvez-vous m'aider s'il vous plaît? Je vais ajouter plus de détails si vous avez besoin. Merci

Répondre

1

Vous avez seulement besoin d'un mutex pour protéger les objets auxquels plusieurs threads accèdent, où au moins un de ces threads modifie l'objet.

Si votre matrice est redimensionnée avant tous les threads y accèdent (par exemple avant que les threads ne soient démarrés) alors vous avez seulement besoin d'un mutex si plus d'un thread accède à la même cellule. Si vos threads accèdent à des cellules différentes, à condition qu'aucune d'entre elles ne redimensionne la matrice, tout sera OK.

Si un thread écrit dans une cellule et qu'un autre lit dans la même cellule, les deux threads doivent verrouiller le même mutex avant d'accéder à cette cellule. Si deux thread écrivent dans la même cellule, les deux threads doivent à nouveau verrouiller le même mutex. Cela peut être un mutex différent de celui utilisé pour les autres cellules, ou il peut être le même.

Si un thread modifie la structure de la matrice alors que tous les autres threads accèdent à la matrice, tous les threads impliqués doivent verrouiller le même mutex. Cela peut être un mutex différent pour tous les mutex utilisés pour des cellules individuelles, ou il peut être le même.

+0

Oui, la matrice ne va pas être redimensionnée. Merci, ça a marché. –

Questions connexes