2017-09-28 5 views
0

Cette question m'a été récemment posée dans l'une des interviews. Je voudrais savoir quelle est la meilleure façon de mettre en œuvre cela. Disons que j'ai 3 threads t1, t2, t3 et deux queues q1, q2. T1 écrit des données sur q1
t2 écrit des données sur q2
t3 doit lire les données de q1 et q2 dès qu'elles sont disponibles. Je pensais pouvoir utiliser des variables conditionnelles pour lire à la fois q1 et q2. Est-ce possible ou y a-t-il de meilleures approches?Plusieurs files d'attente dans un seul fil dans C

+2

Avez-vous envisagé d'utiliser des sockets locaux ('AF_LOCAL') pour la mise en file d'attente et d'utiliser la fonction' select() 'ou' pselect() 'pour l'attente passive? –

+0

@FabienBouleau Pipes fonctionnerait aussi. –

+0

@FabienBouleau Oui. Cette approche est très possible. Merci. Une idée de comment faire la même chose avec les files d'attente? –

Répondre

0

Attendez t3 sur un sémaphore. t1, t2 met en file d'attente les données et envoie une unité au sémaphore. Quand t3 s'exécute, il interroge les deux files d'attente une fois pour un élément à traiter (il y aura des données dans l'une d'entre elles), et gère ce dequeues/manipule un élément puis boucle pour attendre à nouveau sur le sémaphore pour plus d'éléments.

Je suppose que la classe de file d'attente est thread-safe, (sinon protéger avec mutex).