Thread Mehrere Prozesse gleichzeitig auf eine Datei... (16 answers)
Opened by Fatso Keratso at 2006-03-27 16:16

GwenDragon
 2006-03-27 17:06
#64095 #64095
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Semaphordatei benutzen.
In eine Datei, wenn sie noch nicht vorhanden ist, den Wert 0 schreiben. 0 bedeutet frei. Der Wert in der Datei ist der Semaphor.
Und immer schön die Semaphordatei bei jedem Schreiben vorher sperren!

Prozess A inkrementiert den Semaphor.
Wenn Prozess A beendet wird, nmuss der Semaphor wieder dekrementiert werden.
Prozess B fragt den Semaphor ab und solange er nicht Null ist, muss er warten.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub getSemaphor {
  my $fn = shift; # Dateiname
  open (SEM, "< $fn");
  flock( SEM, LOCK_EX);
  my $sem = <SEM>;
  close( SEM );
  return $sem;
}

sub setSemaphor {
  my $fn = shift; # Dateiname

  my $sem=getSemaphor($fn);
  open (SEM, "> $fn");
  flock( SEM, LOCK_EX);
  print SEM ++$sem; # Semaphor erhöhen und schreiben
  close( SEM );
  return $sem;
}


Wenn du allerdings auf sicher gehen willst, solltest du statt open ein sysopen benutzen, da kannst du dann auch direkt im sysopen Aufruf sperren.\n\n

<!--EDIT|GwenDragon|1143465811-->

View full thread Mehrere Prozesse gleichzeitig auf eine Datei...