j'ai un système multi-tâches dans lequel un fil conducteur doit attendre dans l'état de blocage pour l'un des suivants 4 événements de se produire:Comment bloquer un seul thread pour 3 événements différents (sémaphore, condition de pthread et blocage du socket recv)?
- sémaphore inter-processus (sem_wait())
- condition de pthread (pthread_cond_wait())
- recv() de la douille
- délai d'attente expire
Idéalement, je voudrais un mécanisme pour débloquer le fil conducteur lorsque l'un des ci-dessus se produit, quelque chose comme un ppoll() avec un paramètre de timeout approprié. Non-bloquant et polling est hors de l'image en raison de l'impact sur l'utilisation du processeur, alors que le blocage de threads distincts sur différents événements n'est pas idéal en raison de la latence accrue (un déblocage de thread d'un des événements devrait éventuellement réveiller un).
Le code sera presque exclusivement compilé sous Linux avec la chaîne d'outils gcc, si cela peut aider, mais une certaine portabilité serait bonne, si possible.
Merci à l'avance pour toute suggestion
Êtes-vous capable de modifier le code pour les threads d'arrière-plan? Autrement dit, pouvez-vous ajouter plus de code autour de l'endroit où les variables de sémaphore et de condition sont modifiées dans les threads d'arrière-plan? – bnaecker
@bnaecker J'ai accès au code de synchronisation intra-thread (essentiellement, les threads qui notifient la variable conditionnelle pthread) mais pas le sémaphore inter-processus, car le processus que sem_post() sur ce sémaphore attend est 3ème partie et en dehors de mon contrôle. – Bob