Bonjour !
Je cherche a faire un graphe dans un environnement extrêmement multithreadé. Les nodes du graphe doivent pouvoir être liés, c'est a dire que les deux nodes du lien stockent un pointeur vers l'autre élément. Je veux le rendre thread safe dans le sens où n'importe quel thread peut appeler link() avec n'importe quelle instance. Plusieurs thread peuvent le faire en même temps.
Avec cette implémentation cependant, je cours le risque de gros deadlocks. Je me demandais s'il existait une solution à ce problème, ou s'il s'agit d'un problème de design.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 class A { A* m_link Mutex m_mutex; public: bool link(A* p_other) { //checks if(!p_other) return false; //No link to null pointer if(m_link) return false; //Already linked //Lock mutexes Lock l1(p_other->m_mutex); if(p_other->m_link) return false; //p_other already linked Lock l2(m_mutex); //Link m_link = p_other; p_other->m_link=this; return true; } };
Partager