Thread Synchronisation



  • Hallo Leute,

    ich habe einen gemeinsamen Datenbereich, auf den konkurrierend zugegriffen wird.
    Ein Thread schreibt, viele andere lesen. Wichtig ist nun, dass die Lesenden immer mitbekommen, wenn geschrieben wird. Sie dürfen die Daten nicht verpassen, sollen sie aber auch nur einmal lesen. Also wenn geschrieben wurde, dann müssen die Leser geweckt werden und lesen. Danach kann wieder geschrieben werden.

    Werkzeuge: was boost so hergibt.

    Vorschläge? Literaturhinweise?
    thx



  • Implementier doch eine Art Event, dass an alle "Leser" gesendet wird, wenn geschrieben wurde. Das setzt natürlich voraus, dass der "Schreiber" alle "Leser" kennt.



  • It0101 schrieb:

    Implementier doch eine Art Event, dass an alle "Leser" gesendet wird, wenn geschrieben wurde. Das setzt natürlich voraus, dass der "Schreiber" alle "Leser" kennt.

    Leider geht das aus diversen Gründen in diesem Projekt nicht. Es muss mit Mutexen, Bedingungsvariablen und Semaphoren klappen. Aber danke.



  • Wie waere es mit Pipes? Der Writer schreibt rein und die Readerfunction verteilt es an die einzelnen Threads. Jeder, der was mitbekommen moechte, registriert sich beim Reader.



  • knivil schrieb:

    Wie waere es mit Pipes? Der Writer schreibt rein und die Readerfunction verteilt es an die einzelnen Threads. Jeder, der was mitbekommen moechte, registriert sich beim Reader.

    Auch das geht leider nicht. Das einzige, was die Threads gemeinsam haben, sind Mutexe, Bedingungsvariablen, Semaphore und den Speicherbereich für die Daten. Danke trotzdem.



  • Auch das geht leider nicht.

    Was soll das, warum geht das nicht? Bitte bauen sie den Koelner Dom, aber benutzen sie nur Ziegelsteine und Leitern? Diverse Gruende, pah ... Wenn etwas nicht geht, dann hat man zu engstirnig gedacht. Es gibt auch named pipes, da kann man den Namen hart in den Quelltext programmieren ... mittels FIFO devices kann man das ganze sogar ueber "Dateien" regel ... ansonsten musst du dir wohl das Producer Consumer Beispiel ansehen. Ich werde dich nicht aufhalten, wenn du den Berg kriechend erklimmen willst, aber ich benutze den Lift.


Anmelden zum Antworten