Suche Beispiel für einen bzw. mehrere Thread(s) mit Critical Section



  • Hallo,

    suche ein Beispiel mit ein paar Zeilen der Erklärung geht auch ohne Erklärung), wie ich eine Critical Section einrichte, betrete, verlasse... 😕

    Bin für jeden Tip dankbar!



  • *lol*
    man sieht das du Multithreading machst, ein Thread im Forum reicht dir nicht mehr 😉

    Also das ganz MT Zeugs ist in der <afxmt.h> drinne.

    Eine CCriticalSection kannst du mit Lock sperren und mit Unlock wieder entsperren.
    Sobald gelockt ist, geht in den folgenden Abschnitt nur ein Thread rein, alle anderen müssen warten, bis wieder Unlock aufgerufen wurde.

    Wenn du eine Variable in verschiedenen Therads benutzen willst, ummantelst du diese mit der CriticalSection, wichtig ist natürlich, dass dafür diesselbe Instanz von CCriticalSection genutzt wird!

    CCriticalSection sec;
    int count = 0;
    
    void thread1Func()
    {
        int i = 0;
        while(i < 1000)
        {
            sec.Lock();
            ++count;
            sec.Unlock();
            Sleep(500);
        }
    }
    
    void thread2Func()
    {
        int i = 0;
        while(i < 3000)
        {
            sec.Lock();
            --count;
            sec.Unlock();
            Sleep(200);
        }
    }
    

    Das ist jetzt ein recht sinnfreies Bsp. aber ich denke, der Grundgedanke kommt rüber.



  • 😃 durch parallelisieren Zeit gewinnen! Außerdem war vielleicht auch der erste Titel nicht so ansprechend...

    Vielen Dank für den Code. Habe das Prinzip begriffen. Es gibt scheinbar in diesem Zusammenhang auch noch sowas wie:

    EnterCriticalSection(&cs);
    ...
    LeaveCriticalSection(&cs);
    

    Macht das das Gleiche?



  • Jo, ist halt der direkte WinAPI-Aufruf


Log in to reply