J'ai récemment vu la lumière du comportement puissant de EventWaitHandle en C# et j'ai décidé de déplacer certaines fonctionnalités dans une application sœur pour faire de même. Le seul problème est que l'application soeur est écrite en C.Comportement EventWaitHandle pour pthread_cond_t
Pas grave, j'utilise des pthreads, qui ont un type de données pthread_cond_t qui permet la signalisation. Ma seule question est la suivante: est-il possible qu'un message soit «signalé» avant que quelque chose ne l'attende?
À l'heure actuelle, mes tests disent non. Autrement dit, si ThreadA déclenche un signal avant que ThreadB n'attende, ThreadB attend indéfiniment. Y at-il un autre type de pthread que je peux utiliser qui se rapproche de la fonctionnalité de l'EventWaitHandle en C#? Un objet est signalé, ce qui signifie que le premier thread à attendre, passera immédiatement, et le mettra à non-marqué.
Envelopper le pthread_cond dans une autre structure de données ne serait pas trop difficile à réaliser. Mais encore une fois, cette fonctionnalité est-elle déjà disponible dans la bibliothèque pthread?
qui pourrait entraîner un blocage si le fil d'attente bloqué avant l'envoi du signal ... ne le ferait-il pas? –
Non, souvenez-vous que lorsque vous attendez sur la condvar, le lockobj est libéré (ceci est fait automatiquement et atomiquement par le fonctionnement des variables de condition). Il est réacquis avant que le thread en attente ne reprenne son exécution. –
Voir http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html sur le comportement de libération de mutex. –