Bonjour,
j'ai un code qui gère un système multithreadé avec des mutex. J'ai une interface HTTP qui me permet d'ajouter ou de killer des threads. La plupart du temps, mes threads sont en attente d'une condition (pthread_cond_wait) et donc le mutex est locké. Lorsque je kill mon thread, il faut qu'il débloque le mutex (pthread_unlock). Je fais donc appel à la macro pthread_clean_push(routine, args) / pthread_clean_pop(1) afin de lui demander de relacher le mutex avant de se détruire (la fonction pthread_mutex se trouve dans "routine"). Le thread est détruit à partir d'un autre thread via pthread_cancel.
Le tout fonctionne très bien avec :
gcc - lpthread
le problème est que je dois compiler avec l'option "-static" et dans ce cas précis, lorsque le pthread_cancel est appelé, il n'appelle pas "routine" et mon application tombe donc en dead lock puisque le mutex n'est pas relaché.
J'ai essayé d'utiliser pthread_kill à la place de pthread_cancel en vain.
J'ai testé:
gcc -static -Wl,-whole-archive -lpthread -Wl,-no-whole-archive
gcc -static -pthread
=> donnent le même résultat => dead lock
gcc -static -lpthread
=> ne fonctionne pas
Je suis sous une machine Linux et je développe sous Eclipse en C++.
Merci d'avance pour votre aide.