Suche Queue



  • Hallo!
    Ich suche eine Art von FIFO-Warteschlange (queue), am besten in der stdlib, die folgende Voraussetzungen erfüllt:
    -Sie muss schnell sein (d.h. man sollte vorab Speicher reservieren können, im Überlauffall sollte sie aber selbständig dynmaisch speicher allozieren können.
    -Sie sollte eine wait()-Funktion haben, um nicht beim aktiven Warten Rechenzeit zu verschwenden(und z.B. alle 10 ms zu checken, ob Daten vorhanden sind, ist wegen der Performance schlecht möglich)
    -Die Daten müssen in derselben Reihenfolge gepopt werden können wie sie gepusht werden.
    -Es muss pro Instanz nur ein fester Datentyp mit fester Länge, der zur Compilezeit festgelegt werden kann.
    -Die Warteschlange muss multithreading untersützen (wenigstens mit manuellem Locking) aber IPC-Untersützung ist nicht nötig.

    std::deque biete halt leider keinen wait-Mechanismus. Kann ich dies irgendwie anders lösen?

    Danke im Voraus, Hans


  • Administrator

    Golem86 schrieb:

    std::deque biete halt leider keinen wait-Mechanismus. Kann ich dies irgendwie anders lösen?

    Wer hindert dich daran, dass du es selber einbaust?
    Platformunabhängige Threads und Sychronizierung findest du bei boost:
    http://www.boost.org/doc/libs/1_35_0/doc/html/thread.html

    Und du kannst ja selber einen Queue Adapter bauen. Das geht für den deque Container zum Beispiel ganz einfach. In diesem Adapter könntest du dann mit Boost.Thread auch die wait Methode einbauen.

    Grüssli



  • Hallo,
    Danke erstmal für deine Antwort!
    ich glaube es reicht, wenn ich den wait-Mechanismus direkt im Quellcode einbaue.
    Da meine Threads sowieso mit boost.:thread relasisiert sind, sollte das eigentlich kein Problem sein. Aber wie kann ich einen thread pausieren und diesem von einem anderen Thread wieder aufwecken?

    Danke, Hans


  • Administrator



  • Danke, war genau das, was ich gesucht habe 🙂
    Alles andere habe ich schon gestern gelesen aber condition variable erinnert mich halt nicht so an waiting 🙄

    mfg, Hans


Anmelden zum Antworten