2009-04-10 8 views
1

In iTron gibt es eine leichtere Version der Nachrichten-Warteschlange, die Daten-Warteschlange genannt wird. Sie sind sehr einfach für schnelle Nachrichtenübertragungen zu verwenden. Gibt es unter Linux ein gleichwertiges Synchronisationsgrundelement?iTron Daten-Warteschlange in Linux

Definition von Daten-Warteschlange: Es ist eine Warteschlange für ein Wort Nachrichten

+0

Für diejenigen von uns, die nicht mit iTron vertraut sind, könnten Sie uns bitte auf einen Link verweisen, der diese "Daten-Warteschlange" beschreibt? –

Antwort

2

Zu den wenigen Gelegenheiten, die ich benötigt habe, um meine eigene Nachrichtenwarteschlange zu implementieren, tendiere ich dazu, 1 Semaphor und 1 Mutex (oder Semaphor) für jede Warteschlange zu verwenden. Ich habe mich nur mit Thread-Level-Queues beschäftigt, daher trifft dies wahrscheinlich nicht zu, wenn Sie eine Warteschlange zwischen zwei Prozessen haben wollen.

Der Semaphor wird verwendet, um die Anzahl der Nachrichten in der Warteschlange zu zählen und den OS-Mechanismus für den Thread bereitzustellen, der neue Nachrichten aussetzen/warten soll.

Der Mutex wird zum Schutz der gesamten Warteschlangenstruktur verwendet.

So könnte es ein bisschen so aussehen (sehr viel 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 
} 

Aber vielleicht das „Gewicht Licht“ nicht sehr ist. Dies setzt auch voraus, dass Warteschlangen während der Verwendung nicht zerstört werden. Außerdem vermute ich, dass mit einer "WORD" nur Warteschlange, könnte es einige Optimierungen geben.

Wenn Sie "Lock-free-Code" suchen, dann schlage ich vor, verbringen Sie einen oder zwei Tage durch diese articles by Sutter lesen.

Viel Glück!

1

Ich weiß nicht, von einer solchen primitiv. Ich implementierte eine atomare Warteschlange mit POSIX semaphores.

+0

Danke für die Antwort, Eine Daten-Warteschlange ist eigentlich eine Warteschlange der Größe int (normalerweise 32 Bit). Und das ist wahrscheinlich anders als die atomische Schlange von Semaphoren. – Alphaneo