tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von vfl_freak
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
249
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von bile
    bile bile ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Ort
    Zug (Schweiz)
    Beiträge
    52
    Hallo

    nur kurz eine Frage, in der Klasse java.util.concurrent.Semaphore bin ich über folgenden Code gestolpert:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    for (;;) {
                    int available = getState();
                    int remaining = available - acquires;
                    if (remaining < 0 ||
                        compareAndSetState(available, remaining))
                        return remaining;
                }

    den Aufruf for( ; ; ) hab ich so noch nie gesehen, ist das im wesentlichen das selbe wie while(true) oder besser: was ist der Witz davon hier nicht while(true) zu verwenden?

    .bile
     
    Wandering in Greyhawk...

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von bile Beitrag anzeigen
    nur kurz eine Frage, in der Klasse java.util.concurrent.Semaphore bin ich über folgenden Code gestolpert:

    java Code: for (; {

    int available = getState();

    int remaining = available - acquires;

    if (remaining < 0 ||

    compareAndSetState(available, remaining))

    return remaining;

    }




    den Aufruf for( ; ; ) hab ich so noch nie gesehen, ist das im wesentlichen das selbe wie while(true) oder besser: was ist der Witz davon hier nicht while(true) zu verwenden?
    im Prinzip hast Du Recht ... beides sind quasi Endlosschleifen, die jeweils solange laufen, bis sie irgendein RETURN beendet
    Dass sich FOR- und WHILE-Schleifen vom Prinzip her leicht unterscheiden, ist Dir klar ?

    Aber in diesem Fall sollte die Verwendung IMHO völlig egal sein ...

    Gruß
    Klaus
    bile bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    Avatar von bile
    bile bile ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Ort
    Zug (Schweiz)
    Beiträge
    52
    Danke für die schnelle Antwort.

    das Prinzip der beiden Schleifen ist mir klar, ja

    bis anhin kamen mir bei der Arbeit und in Vorlesungen halt immer nur die klassischen while(true) zu Gesicht.
    Hab in der Zwischenzeit noch eine Angabe bei Java ist auch eine Insel gefunden:
    hier, wen's interessiert
    Demnach sind die Schleifen tatsächlich äquivalent. Ich dachte, dass sich hier noch irgendwo ein raffinierter Unterschied findet, den ich nicht sehe
     
    Wandering in Greyhawk...

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Meinst Du "do ... while" ?
    Du musst hierbei nur aufpassen, dass dabei ggf. die Bedingung zuletzt geprüft wird !

    Beispiel:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    // hier wird "tue irgendwas" genau 10x ausgeführt
    for( int i = 0; i < 10; i++ )
    {
        // tue irgendwas
    }
     
    // ----------------------------
     
    // hier wird "tue irgendwas" solange ausgeführt, wie "Bedingung" erfüllt
    // u. U. also gar nicht, wenn "Bedingung" VOR der Schleife nicht erfüllt ist
    while( Bedingung )
    {
        // tue irgendwas
    }
     
    // ----------------------------
     
     // hier wird "tue irgendwas" solange ausgeführt, wie "Bedingung" erfüllt,
    // mindestens aber einmal, da "Bedingung" erst am Ende geprüft wird  !
    do
    {
         // tue irgendwas
     }
    while( Bedingung );  // man beachte das Semikolon !

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    Avatar von bile
    bile bile ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Ort
    Zug (Schweiz)
    Beiträge
    52
    ich meine nur für den infiniten Fall. for( ; ; ) und while(true) laufen in jedem Fall bis zum ersten return, break etc.
    Die Race Condition ist ja sowieso true -> die Schleifen sind für den speziellen Fall hier äquivalent.

    Inwiefern sich die parametrisierten Schleifen unterscheiden ist mir schon klar

    .bile
    Geändert von bile (20.04.10 um 13:27 Uhr)
     
    Wandering in Greyhawk...

  6. #6
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Ob man for( ;; ) oder while(true) verwendet, ist nur eine Frage des persönlichen Stils; die erste Variante ist kürzer (Programmierer sind tippfaul), die zweite ist für Ungeübte leichter zu verstehen.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.