Volatile Frage



  • Ich möchte ein Programm schreiben, wo der Byte-Buffer mit den Bytes, die recv()
    eingelesen hat, einem Thread zur Verfügung gestellt werden kann.
    Vor dem Aufruf von recv() hätte ich mir vorgestellt, dass ich
    TryEnterCriticalSection() aufrufe, für den Fall, dass der andere Thread
    noch mit dem Auslesen älterer Daten aus dem Buffer beschäftigt sein sollte.
    Habe im Netz allerdings aufgeschnappt, dass (warum auch immer) der Buffer
    volatile sein muss, damit mehrere Threads damit arbeiten können.
    Genügt denn nicht einfach nur eine gewöhnliche globale Variable für den Buffer?
    Vor allem: wenn ich volatile davor hinschreibe, ist dann nur der Zeiger volatile oder auch der Speicherblock, auf den der Zeiger verweist?

    Also z.B. so:

    volatile char* Buffer;
    /* ... */
    int main(){
     Buffer = malloc(4096*sizeof(char));
     /* Ist jetzt nur 'Buffer' volatile, oder gilt das für den ganzen Speicher-
        block, den ich mit malloc() allokiert habe?
        Warum MUSS denn Buffer volatile sein? */
    

    Hoffentlich kennt sich hier jemand genauer mit der volatile-Pflicht bei
    mehreren Threads aus. Wozu ist das volatile überhaupt gut?
    Danke schon mal im Voraus.



  • 1. Warum TryEnterCriticalSection(..), nimm gleich EnterCriticalSection(...)
    2. Lass das volatile weg, die Critical Section genügt.



  • oh, ok danke für die schnelle Antwort!
    werde dann also gar kein volatile benötigen.
    Danke !!!


Anmelden zum Antworten