Multithreading mit Semaphor

  • Ich brauche eine Erläuterung zu einem Problem im Zusammenhang mit Multithreading. Ich habe Threads, die ein Semaphor erwerben, und es nach einiger Zeit wieder freigibt. Sobald es mit dem ersten Semaphor fertig ist, erhält es das zweite und später, während es veröffentlicht wird. Beide Semaphore schützen unterschiedlichen Code in der run () - Methode von thread. Etwas wie folgt:

     public void run() {
         System.out.println("Step 1");
         semaphoreA.acquire();
    
         // Run for a while
    
         semaphoreA.release();
    
         // Run for a while
    
         semaphoreB.acquire();
         System.out.println("Step 2");
    
         // Run for a while
    
         semaphoreB.release();
    }
     

    Wenn also keine Berechtigung für SemaphoreB besteht, wartet der Thread. Kann ich jedoch, wenn die Genehmigung zur Verfügung gestellt wird, nicht "Schritt 2" auf der Konsole sehen? Oder so funktionieren Thread und Semaphor?

    Ich möchte wissen, was passiert, wenn ein Thread gerade über eine verfügbare Semaphorerlaubnis informiert wurde. Würde dieser Thread von vorne anfangen? oder von dem Punkt, an dem es noch übrig war?

    09 October 2012
    Jan HrcekLucas
1 answer
  • Angenommen, Sie haben SemaphoreA und SemaphoreB mit dem neuen Semaphor (1, wahr) instanziiert, so dass Sie am besten Folgendes sehen:

    Schritt 1

    Schritt 2

    Wenn ein anderer Thread das Semaphor erfasst, bis es freigegeben wird, wartet dieser Thread nur, wo es ist. Mit anderen Worten, Sie werden niemals Schritt 1 einmal, aber niemals zweimal ausführen. Schritt 2 wird möglicherweise nicht angezeigt, je nachdem, ob einer der Semaphore freigegeben wurde.

    22 November 2011
    Luis