Je cette struct:Vecteur de pthread_mutex_t me donne la même adresse pour tous mutex
struct thread_items {
pthread_mutex_t mutex;
int i;
thread_items(pthread_mutex_t m, int i): mutex(m), i(i){}
}
Je suis en train de créer un tableau de cette struct et initialiser tous les mutex pendant que je suis à elle. Pour une raison quelconque, quand j'imprimer les adresses mutex je reçois tous de la mutex avec la même adresse:
vector <thread_items*> thread_items_vec;
for (int i = 0; i < 3; i++)
{
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
thread_items * items = new thread_items(mutex, i);
thread_items_vec.push_back(items);
cout << "Mutex " << i << " is " << &mutex << endl;
}
Il en résulte cette impression:
Mutex 0 is 0x7fff9580b520
Mutex 1 is 0x7fff9580b520
Mutex 2 is 0x7fff9580b520
La raison pour laquelle je suis arrivé à imprimer est parce que mon la simultanéité a des problèmes et j'ai remarqué que je ne suis pas en train de verrouiller le bon Mutex.
Donc ma question est: est-ce que j'initialise correctement le mutex pour avoir 3 mutex différents? Est-ce que mon impression montre vraiment un problème ici? À partir des réponses, j'imprime le pointeur de pile qui est toujours le même. Cela signifie-t-il que j'initialise mon Mutex pour la même adresse?
Qu'est-ce 'thread_items_map'? –
Qu'est-ce que thread_items_map? –
Désolé le code est vraiment complexe, j'ai essayé d'apporter uniquement les parties pertinentes. Je vais éditer ma question – Eyzuky