Bonjour,
je voudrais vérifier une information, mais je n'ai pas trouvé ce que je voulais sur le net (j'ai surtout trouvé du Java).
Si vous pouviez me dire si ce que je dis ci-dessous est vrai ou non, ça me débloquerait!
L'information que je voudrais vérifier est
Par exemple, une méthode std::cout << "hello world"; ne posera pas de problème si 2 threads appellent simultanément cette méthode sur un même objet.2 threads peuvent appeler la même méthode d'un même objet sans problème mais il il peut y avoir un problème si les méthodes font un accès concurent à un attribut de l'objet alors qu'il n'est pas protégé.
Par contre, le code suivant posera problèmeSi 2 threads appellent cette méthode sur un même objet, on aura
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int res = AttributNombreAppelMethode; // AttributNombreAppelMethode est un attribut de l'objet qui compte le nombre de fois où sa méthode a été appelée std::cout << "le nombre d'appel de cette méthode est " << res; AttributNombreAppelMethode= res + 1;
1er thread ////////// 2ème thread
res = 0;
//////////////////////// res = 0;
AttributNombreAppelMethode = 1;
//////////////////////// AttributNombreAppelMethode = 1; // au lieu de 2
En plus des problèmes de cohérence des valeurs, il peut y avoir des problèmes si les threads écrivent en même temps dans attribut de grande taille, puisque l'attribut sera composé à la fin d'un mélange de ce que les 2 threads ont mis.
Une méthode qui peut être appelée simultanément sur le même objet sans poser de problèmes:Je ne suis pas sûr du tout de ce que je viens de dire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 LockMutex(); // prend le mutex int res = AttributNombreAppelMethode; AttributNombreAppelMethode++; UnlockMutex(); // rend le mutex std::cout << "le nombre d'appel de cette méthode est " << res;
Est ce que quelqu'un pourrait me dire ce qu'il en pense, svp?
Merci d'avance!
Partager