Frank Scharffenberg: flock - widersprüchliche Aussagen im Archiv ?

Hallo Forumer!

Bei der Suche nach einer Lösung zur Syncronistion paralleler Prozesse bin ich auf widersprüchliche Aussagen im Archiv gestoßen </selfhtml/sfarchiv/2000_1/t10343.htm>:

Dieser Ansatz verfolgt ein Konzept, bei dem bei zu langer Wartezeit auf die Freigabe eines Files durch einen anderen Prozess eine Fehlermeldung ausgegeben wird:
<cite 1>
$timeout=10000; #how long the script waits between attempts to get a lock
$exit=100;          #how many attempts to get a lock before exiting the script

open (FILE, "file");

if file is locked keep trying until $exit

if (!flock(FILE,2))
  {
  until ($released eq TRUE or $x>$exit) {

# little timeout
    $i=0;
    for ($i=0;$i<$timeout;$i++) {}  
    #count attempts
    $x++;
    if (flock(FILE,2)) {$released=TRUE;}

} # end until

} # end if

if too many attempts

if ($exit>100) {
  print "Server too busy, please try again.";
  close(FILE);
  die;
}else {
  # lock file
  flock(FILE,2);
  # do your sutff { }
  close(FILE);
} # end else
</cite 1>

<cite 2>
Was soll das denn? "flock FILE,2" wartet solange, bis der andere Prozess / die anderen Prozesse das File wieder
freigeben haben. Wenn Du nur pruefen willst, ob eine Datei gelockt ist, musst Du LOCK_SH/LOCK_EX _und_ LOCK_NB
benutzen.
</cite 2>

Nach der 2. Aussage würde der Ansatz der ersten Lösung wirkungslos sein, denn der Prozess würde solange am ersten flock stehen, bis das File vom anderen Prozess wieder freigegeben wird.
Oder sehe ich was falsch?

Gruß Frank

  1. Hi!

    Nach der 2. Aussage würde der Ansatz der ersten Lösung wirkungslos sein, denn der Prozess würde solange am ersten flock stehen, bis das File vom anderen Prozess wieder freigegeben wird.

    Genau. Es ist doch klar zu erkennen, dass Cruz sich seiner Sache keineswegs sicher war.

    Bye

    1. Hi Calocybe!

      Genau. Es ist doch klar zu erkennen, dass Cruz sich seiner Sache keineswegs sicher war.

      Aber der Vorschlag im Posting  <../../sfarchiv/2000_1/t10343.htm#a52216> schien ja Cruz' eingültige Lösung zu sein, zumal sie ja als Anwort auf das posting von Peter kam.

      Gruß Frank

  2. Hallo Frank,

    schau mal auf http://www.boutell.com/openfaq/cgi/25.html, der 2. Weg der da beschrieben wird
    funktioniert einwandfrei; Rolf