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

Beitrag lesen

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