C Confus sur la façon d'initialiser et mettre en œuvre un pthread mutex et de la variable de condition

Je suis un peu confus sur la façon d'initialiser et mettre en œuvre un pthread mutex et de la variable de condition. L'objectif du programme est d'avoir des producteurs place un certain nombre d'entiers dans une file d'attente et les consommateurs à prendre les services de renseignements de la file d'attente. Je dois aussi être capable de définir le nombre de producteurs et de consommateurs threads créés. Dans le starter code, je me suis donner à ces:

//Locks & Condition Variables
pthread_mutex_t lock; //Lock shared resources among theads
pthread_cond_t full;  //Condition indicating queue is full
pthread_cond_t empty; //Condition indicating queue is empty

que la mise en commun des ressources. Dans le //TODO commentaire dans la méthode main, l'une des étapes dit pour initialiser le verrouillage et l'état des variables. J'ai une très faible compréhension de pthread mutex et conditions, alors je dis:

lock = PTHREAD_MUTEX_INIT;
full = PTHREAD_MUTEX_INIT;
empty = PTHREAD_MUTEX_INIT;

Dans le consommateur et le producteur, les méthodes, serait je viens d'appeler le verrouiller en disant:

pthread_mutex_lock(&lock);

et

pthread_cond_wait(&full, &lock);

?

Mon code est assez buggé pour l'instant, alors je veux au moins faire en sorte que je suis en utilisant le mutex et les conditions correctement avant de débogage supplémentaires. Merci à l'avance!

  • Quelle est ta question exactement?
  • Le mutex je suis sûr que vous avez une poignée sur, mais la langue vernaculaire dans les commentaires pour les personnes de condition vars ressemble à un problème. Les variables de Condition, de ne pas "indiquer" quoi que ce soit. Ils sont un mécanisme de signalisation. Ce mécanisme, lorsqu'il est correctement utilisé en conjonction avec un mutex, les signaux des changements dans l'état de externe prédicat de données que vous possédez.
  • Oh, et ne pas initialiser la variable de condition avec PHREAD_MUTEX_INIT. C'est clairement faux. Utilisation PTHREAD_COND_INITIALIZER.
  • Ma question est de savoir si ou non je suis la mise en œuvre de ces correctement. Mon code est buggé et je vais essayer de voir si je au moins correctement initialisé et a appelé ces.
  • Et merci WhozCraig, je suis en les utilisant comme un mécanisme de signalisation. Je pense juste que le professeur formulée correctement le commentaire.
InformationsquelleAutor user3591210 | 2014-05-01