frage zu threads



  • hi folks!

    zwei threads, eine funktion.
    beide threads rufen in einer endlosschleife die funktion auf und übergeben einen parameter an sie.
    die funktion hat eine lokale variable A und nimmt den parameter entgegen.
    teilen sich die thread jetzt diese eine variable A, oder hat jeder thread seine eigene kopie, oder wie ist das eigentlich ??? 😕



  • Lokale Variablen sind immer thread-lokal, weil jeder Thread seinen eigenen stack hat.



  • Die Funktion mit der Variable A ist kein Thread.
    Es wird aber für jeden aufrufenden Thread ein Stack eingerichtet, der die Variable A kopiert.



  • Es gibt aber eine Sache, auf die man aufpassen muss:

    Die Variable A darf NICHT static sein.

    Gruß mcr

    Bsp:

    void func1(int b) {
        int a = 10;
        ...
    }
    
    void func2(int b) {
        static int a = 10;
        ...
    }
    

    Die Funktion func1 ist thread-safe, während die Funktion func2 es nicht ist.
    Das Problem bei func2 ist eben die static Variable, die eben nicht aufm
    thread-eigenen Stack angelegt wird.



  • mcr schrieb:

    Es gibt aber eine Sache, auf die man aufpassen muss:
    Die Variable A darf NICHT static sein.
    Gruß mcr
    Bsp:

    void func1(int b) {
        int a = 10;
        ...
    }
    void func2(int b) {
        static int a = 10;
        ...
    }
    

    Die Funktion func1 ist thread-safe, während die Funktion func2 es nicht ist.
    Das Problem bei func2 ist eben die static Variable, die eben nicht aufm
    thread-eigenen Stack angelegt wird.

    ok und wie ist es, wenn ich func3 habe, func3 ist ein thread.
    darf ich da auch nicht static benutzen ?



  • Es muss sichergestellt werden, dass keine zwei oder mehr Threads auf die selbe
    Speicherstelle zugreifen.

    Wenn eine Funktion nur von einem Thread benutzt wird, ist es kein Problem,
    wenn static Variablen verwendet werden. Sollte man trotzdem mit mehreren
    Threads auf eine static Variablen zugreifen müssen, dann kann man mit
    Mutexen einen exklusiven Zugriff auf eine static Variablen erhalten.

    Ich hoffe, das ist nun etwas klarer.

    Gruß mcr



  • mcr schrieb:

    Ich hoffe, das ist nun etwas klarer.
    Gruß mcr

    ja, danke 🙂


Anmelden zum Antworten