EnterCriticalSection innerhalb einer Funktion sinnvoll



  • Hallo,
    ich habe eine Frage zum Titelthema.
    Beispielcode:

    CRITICAL_SECTION cs_LOCK;
    InitializeCriticalSection(&cs_LOCK);
    
    bool Funktion(int daten)
    {
       EnterCriticalSection(&cs_LOCK); //den kritischen Bereich betreten
       ...
       irgentwas machen mit "daten"
       ...
       LeaveCriticalSection(&cs_LOCK); // den kritischen Bereich verlassen
    
       return true;
    }
    

    wenn jetzt 2 Threads gleichzeitig in die Funktion mit jeweils einem int-Wert gehen,
    kommt es dann schon zu Komplikationen oder muss ich die CRITICAL_SECTION um die ganze Funktion machen?

    Ich fände es sehr praktisch so, da beim aufrufen der Funktion nicht so viel Schnickschnack drumherum steht.

    danke schonmal für die Antwort


  • Mod

    Daten ist doch nur eine int unddazu noch ein Value auf dem Stack.
    Da brauchst Du so was gar nicht.

    Eine Critical Section wird nur benötigt, wenn zeitgleich irgendwelche Daten im Speicher verändert werden sollen.



  • In der Mitte des Codes steht:

    irgentwas machen mit "daten"
    

    Beide Threads machen gleichzeitig etwas mit dem int-Wert.

    dafür brauche ich kein CRITICAL_SECTION?

    "Daten ist doch nur eine int... "
    Der kleine int-Wert sollte nur ein Beispiel sein.
    Lass es ein Array sein oder ein string,struct...



  • Koyui schrieb:

    Beide Threads machen gleichzeitig etwas mit dem int-Wert.

    Nö, machen sie nicht. daten wird per value übergeben und ist somit eine Kopie. Jeder Funktionsaufruf hat seine eigene.



  • ok danke



  • Wenn du allerdings in mehreren Threads den gleichen Pointer übergibst und darin Daten veränderst, brauchst du CRITICAL_SECTION.



  • openglfreak schrieb:

    Wenn du allerdings in mehreren Threads den gleichen Pointer übergibst und darin Daten veränderst, brauchst du CRITICAL_SECTION.

    Das zu synchronisieren ist dann aber Aufgabe des Aufrufers.


Anmelden zum Antworten