2009-12-11 16 views
2

J'utilise un modèle de conception d'objet actif.Liste synchronisée pour l'application filetée

J'ai besoin d'une liste, qui contient des objets définis par l'utilisateur du même type. Les écrivains multiples poussent les objets à la liste et les lecteurs peuvent attendre dans la file d'attente de manière temporisée.

Je sais que je peux emballer une liste STL, mais peut-être y at-il une solution prête en boost? Je ne peux pas le trouver.

UPD:

L'application fonctionne sur Linux (RHEL 5.3).

Répondre

1

Il existe, c'est ce qu'on appelle un mutex. (verrouillable pour boost ..)

0

Il n'y a pas de solution déjà construite, mais vous trouverez les briques dont vous avez besoin. Jetez un oeil à la bibliothèque boost :: thread, ou aux docs dans la bibliothèque de threads que vous utilisez actuellement pour savoir comment l'accès exclusif est accordé. Habituellement, c'est à travers un mutex d'une certaine sorte.

0

Si vous utilisez Windows, Microsoft fournit du code à partir d'une liste de clients multiples, sans verrouillage, à plusieurs producteurs.

Consulter Interlocked Singly Linked Lists

+0

Si vous voulez en ordre la consommation, puis SLIST est limitée à plusieurs producteurs/unique -consommateur. – Adisak

+0

Il convient de noter que "Interlocked Singly Linked Lists" est 32 bits seulement. – paxos1977

+0

Pas vrai MS a fourni une version 128 bits via "cmpxchg16b" – Goz

0

Ce type de conteneur est appelé une file d'attente bornée/blocage

Essayez this page CodeProject par exemple aC#

Le concept est très bien expliqué dans un livre « Concurrent Programmation sous Windows par Joe Duffy

0

Si les objets sont de type POD, vous pouvez les écrire dans un socket sur Linux et obtenir le comportement attendu.