Wie einen DoubleBuffer Implementieren?



  • Hallo,

    ich habe 2 threads, einer schreibt in einen buffer1, wenn der voll
    ist soll thread 2 den lesen wärend thread1 in buffer2 schreibt, danach
    wieder andersrum...

    Hat einer so ne Art Blaupause, wie ich sowas mit der WinAPI anstellen
    kann? Vieleicht sogar n Code-Beispiel?

    Danke!

    Gruss,

    Ralf



  • hm... naja, vielleicht indem du einfach zwei bufer allokierst

    char* buf1=new char[5000];
    char* buf2=new char[5000];
    
    // hast du hier zwei pointer, einen schreib und einen lesepointer
    char* read=NULL;
    char* write=NULL;
    
    // intiailsieren:
    write=buf1;
    
    // jetzt voll schreiben, wenn der buffer voll is, dann
    read=buf1;
    write=buf2;
    
    // und so weiter. So kannst du immer mit dem writepointer schreiben, und du brauchst dabei nich zu wissen, in welchen buffer das gerade geht
    


  • @Maxi: wenn aber der Consumer nicht gleichschnell ist wie der Producer dann wird deine Methode scheitern 😉

    @Threadersteller:
    was du suchst ist eine Methode fuer Thread-Synchronisation. D.h. Thread 1 (der Producer) muss Thread 2 (dem Consumer)bescheid geben, wann es einen Buffer lesen kann (der Consumer soll ja keinen leeren Buffer lesen), und umgekehrt muss der Consumer dem Producer bescheid geben, ab wann der Buffer wieder zum Schreiben frei ist (der Producer soll ja nicht ungelesene Daten ueberschreiben). Leider hab ich keine Ahnung was die WinAPI so an Synchronisationsmittel mitbringt, aber such mal in der MSDN nach "CriticalSection" 🙂



  • Hm, warum pusht der Producer das nicht einfach in einen stack/deque und
    der consumer liest dann dort jeweils die buffer aus? So das der Producer
    nicht anhalten muss, und der Consumer immer wenn er fertig ist, nachschauen
    kann, ob es noch mehr Arbeit gibt...


Log in to reply