2009-04-10 4 views
1

Dans iTron, il existe une version allégée de la file d'attente de messages appelée file d'attente de données. Ils sont très faciles à utiliser pour les transferts de messages rapides. Y a-t-il une primitive de synchronisation équivalente sous Linux?File d'attente de données iTron sous Linux

Définition des données-file d'attente: Il est une file d'attente pour un message de mot

+0

Pour ceux d'entre nous qui ne sont pas familiers avec iTron, pourriez-vous nous indiquer un lien qui décrit cette "file d'attente de données"? –

Répondre

2

Sur les quelques occasions dont j'ai eu besoin pour implémenter ma propre file de messages, j'ai tendance à utiliser 1 sémaphore et 1 mutex (ou sémaphore) pour chaque file d'attente. J'ai seulement traité des files d'attente de niveau de thread, ainsi ceci probablement ne s'applique pas si vous voulez une file d'attente entre deux processus. Le sémaphore est utilisé pour compter le nombre de messages dans la file d'attente et fournir le mécanisme du système d'exploitation pour que le thread suspende/attende les nouveaux messages.

Le mutex est utilisé pour protéger la structure globale de la file d'attente.

Ainsi, il peut paraître un peu comme ça (très pseudo-code):

DataQueueRx(Queue*, WORD*, timeout?) 
{ 
    WaitOnSemaphore(Queue->sema, timeout?); //get token 
    LockMutex 
    { 
     //manipulate your queue, and transfer the data to WORD 
    } 
    ReleaseMutex 
} 

DataQueueTx(Queue*, WORD) 
{ 
    LockMutex 
    { 
     //manipulate your queue, inserting new WORD msg 

     ReleaseSemaphore(Queue->sema); //increment semaphore count 
    } 
    UnlockMutex 
} 

Cependant, peut-être ce n'est pas très "poids léger". Cela suppose également que les files d'attente ne sont pas détruites pendant l'utilisation. En outre, je soupçonne qu'avec une file d'attente "WORD" seulement, il pourrait y avoir quelques optimisations.

Si vous cherchez un "code sans verrouillage", alors je suggère de passer un jour ou deux à lire ces articles by Sutter.

Bonne chance!

1

Je ne sais pas d'une telle primitive. J'ai implémenté une file d'attente atomique en utilisant POSIX semaphores.

+0

Merci pour la réponse, Une file d'attente de données est en fait une file d'attente de taille int (normalement, 32 bits). Et ceci est probablement différent de la file atomique de Semaphores. – Alphaneo