2012-03-19 5 views
-1

Je suis en train d'effectuer multithreading sur un socket en C afin de développer un connecteur entre deux applications logicielles différentes. Je voudrais qu'il fonctionne de la manière suivante. Un morceau de logiciel commencera à fonctionner en tant que serveur, il exécutera une variété de fonctions comprenant l'écoute pour une connexion de prise sur un port désigné. Ce logiciel fonctionnera de lui-même et n'utilisera les données de la prise réseau connectée que si elle est établie et reçoit des données fiables. Donc pour cette pièce je voudrais pouvoir écouter une connexion, et quand on est fait un fork un processus et quand des données sont reçues de cette socket définissez une variable qui sera utilisée par un autre thread de mise à jour pour l'avertir qu'il a ces informations de précision supplémentaire qui peuvent être considérées. De l'autre côté de cette équation, je veux créer un programme qui, lorsqu'il démarrera, tentera de se connecter au port de l'autre application, une fois connecté, il appellera simplement une fonction qui enverra l'information de manière non bloquante . Mon objectif est de créer un connecteur qui permettra aux programmeurs des deux autres éléments de se sentir comme s'ils ne s'occupaient pas d'une socket. J'ai été en mesure d'obtenir la communication multi-thread socket, mais je suis maintenant en train de modifier cela afin qu'il soit utilisable comme je l'ai décrit et je suis confus quant à la façon d'éviter l'accès multiple à cette variable côté serveur que les données sont arrivées ainsi que de créer l'interaction non bloquante sur le côté client. Toute aide sera mal appréciée. -TJC Thread Events événements multithreading

+2

vous devez améliorer cette question un peu, montrer du code et ce qui vous préoccupe. Aussi, il ya beaucoup d'exemples de code pour faire ce genre de chose si vous google –

+0

Devinez que je cherchais juste un bon exemple sur la façon d'éviter l'interblocage ou la notification entre les threads dans c .. Tout ce que je trouve sur google me lie à C++ ou plus récent. –

+0

Quel genre de fils? –

Répondre

0

La question est pas si clair pour moi, mais si vous avez besoin de faire des logiciels différents de parler facilement, vous pouvez envisager d'utiliser une bibliothèque de messages cadre comme ZeroMQ www.zeromq.org

+0

Bonne solution mais un peu trop pour la situation dans laquelle je suis ...Nous cherchons simplement à écrire un connecteur de socket simple, de sorte que nous pouvons envoyer plus de 6-8 points de données d'intérêt dans une image. –

0

Il semble que vous avez un double problème producteur-consommateur ici:

Client side     Server 
producer -> sender thread -> receiver thread -> consumer thread 

Dans ce cas, la structure de données les plus utiles à utiliser est une file d'attente de blocage des deux côtés, comme intel TBB de concurrent_bounded_queue.

Cela vous permet de publier des tâches à partir d'un thread et d'en charger un autre lorsque les threads sont disponibles.