Semaphore



  • Hallo,

    ich habe mehrere Threads die auf eine Variable zugreifen.

    Sieht das dann jeweils so aus .

    //Hole Resource
    P(Semaphore s) ;

    //Zugriff auf Variable z.B. int var

    var = 10;

    // Hier Variable wieder freigeben
    V(Semaphore s);



  • Wahnsinn. Semaphoren. Unglaublich!



  • Ja. Bei mehreren Threads aber wohl unvermeidlich .

    Wie würdet ihr dieses Warten eigentlich realisieren. Ein Thread ruft die Semaphore_acquire oder P-Funktion wie sie oft genannt wird auf und bekommt es nicht und wird in die Warteschlange eingereiht. Aber was würdet ihr machen dass der Thread wirklich wartet ? Diese Thread Sleep methode von der halt ich nicht so viel ?



  • deine trollthreads waren mal besser



  • kritische Abschnitte sind viel performanter als Semaphoren unter Windows



  • Was haltet ihr davon ?? Diesmal ohne Warteschlange. Der Thread polled einfach immer. Wenn das Semaphore zur VErfügung steht bekommt er ein true zurück.
    Findet ihr das besser als den Thread in eine Warteschlange zu stecken , ihn schlafen legen und dann wieder aufwachen ?

    bool status= false;
    
    while(!status)
    {
       status = P_(Semaphore s);
    }
    


  • Nun, es gibt viele verschiedene Synchronisationsmoeglichkeiten. Welche die bessere Wahl ist, haengt vom Problem ab. Ansonsten: http://beej.us/guide/bgipc/



  • Ist Pollen besser als den Thread schlafend zu legen ? Es gibt ja glaub ich auch aktives Warten.



  • Pollen ist aktives Warten!

    besser als

    Das abhaengig vom Problem. Wie oft denn noch ...



  • blurry333 schrieb:

    Aber was würdet ihr machen dass der Thread wirklich wartet ?

    Man schickt den Thread heia bis der Semaphor wieder frei ist. Also ganz ohne Polling, der Scheduler ist dann zuständig dafür den Thread aufzuwecken wenn sobald der Semaphor wieder frei ist. Bzw. u.U. sogar dafür zuständig den Semaphor gleich zu "holen" bevor er den Thread aufweckt.
    Das geht natürlich nur wenn der Scheduler Semaphore kennt und die nötigen Funktionen dafür bereitstellt.
    Oder anders gesagt: Der Semaphor muss im Scheduler implementiert sein.

    Bzw. wenn der Scheduler andere Primitives wie klassische Mutexen + Condition-Variablen anbietet mittels derer man sich seine Semaphore dann "nachbauen" kann, dann halt so. Dann sind halt diese anderen Primitives im Scheduler implementiert.



  • sogenannte spinlocks



  • @spinner
    Wäre vielleicht gut wenn du dazuschreibst auf was dein Beitrag sich bezieht. Entzieht sich mir gerade vollkommen. (Und ich weiss was Spinlocks sind - jmd. der es nicht weiss wird also vermutlich noch mehr daneben stehen...)


Log in to reply