Bonjour,
je me permets de solliciter votre aide car je suis face à un problème concernant l'implémentation d'une synchronisation de plusieurs threads.
Le code est en C/C++, sous Linux (3.12).
Une dizaine de threads, répartis sur plusieurs cœurs CPU, doivent traiter des données en provenance d'autres threads.
Plusieurs threads peuvent attendre les même données d'un même thread et doivent tous être réveillés en même temps (non strict).
Un thread peut parfois prendre plus d'un cycle pour traiter les données, l’événement doit donc être "bufferisé" afin de ne pas mettre le thread en question en sommeil au prochain cycle.
Le mécanisme doit être compatible avec epoll.
A première vue, quand j'ai spécifié l'architecture, je pensais que Linux disposait nativement d'une primitive compatible avec mon besoin.
Malheureusement, depuis hier, je sèche. La plupart des solutions existantes sont conçues pour ne fonctionner qu'avec un seul thread consommateur (ou limité à un seul thread pouvant être réveillé).
Voilà, vous savez tout, j'espère que vous serez plus imaginatif que moi
Merci !
EDIT: j'aimerai bien sûr éviter d'envoyer un événement différent à chaque thread en attente. Le producteur ne doit pas avoir connaissance du nombre de consommateur.
Partager