IPC mit Message Queues - Semaphoren verwenden?



  • Hi,
    so noch ne Frage. Ich mach IPC mit Message Queues unter Linux. Hab 3 Prozesse.
    Zwischen den Prozessen hab ich je 2 Message Queues. Es ist immer so, dass der eine Prozess lesend auf eine MQ zugreift und der andere schreibend.

    Die Abfrage der MQ geht ziemlich schnell hintereinander (zyklisch). Das Senden ab und zu.

    Jetzt die Frage: Muss ich da mit Semaphoren arbeiten? Das heisst dass ich zwischen den Prozessen nen Mutex mach? Oder gibt es da keine Probleme wenn die mal gleichzeitig drauf zugreifen?

    Danke!

    Gruß, Peter



  • Tja, wenn du ganz sicher gehen willst wirst du wohl den harten Weg gehen müssen. Sonst würde ich einfach ne Beispielanwendung schreiben, unter realen Bedingungen laufen lassen und sehen ob es da Synchronisationsprobleme gibt, aber selbst wenn nicht würde ich immer noch lieber ganz sicher gehen und Semaphoren einbauen.



  • ich weiss es zwar nicht mit sicherheit, wuerde aber sagen,
    dass die msg queues threadsicher sind.
    alles andere waere unlogisch. sie sind ja schliesslich dazu
    da, dass die prozesse untereinander informationen austauschen.



  • ok danke. Habs probiert. Gibts bisher keine Probleme ohne Semaphoren.



  • Hi,
    noch ne Frage. Gibt es keine C-Lib-Funktion, mit der ich ne Message Queue leeren kann (ohne irgendwie Schleife und so)? Das heisst einfach alle Nachrichten die drin sind löschen.

    Meine andere Idee wäre, die MQ löschen mit msgctl() und dann wieder neu anlegen....

    Gruß, Peter



  • Du musst die Zugriffe nicht Syncronisieren.
    IMHO ist es besser stream-pipes zu verwenden.
    MessageQ. haben erhebliche Nachteile und sind trotzdem nicht schneller.
    Sie verbleiben sollange im Kernel bis sie gelöscht werden oder neu gebootet wird.
    Stürzt der Server/Client ab hat man da ein Problem.
    Man kann eine MQ nur löschen und somit auch leeren. Macht ja auch keine Sinn sie zu leeren. Die Nachrichten schickt man ja das der SERVER oder Client sie verarbeitet.


Anmelden zum Antworten