Hallo horst,
ich habe ein Problem mit Semaphoren. Wir sollen eine
Datenbank erstellen (Oracle-SQL) und diese
Mehrbenutzerfähig mittels Semaphoren machen --> es darf
kein Datensatz gelöscht werden, der sich gerade angeschaut
wird. Als Tipp hat uns der Dozent gesagt, der Datentyp des
Semaphors ist ein INT. Wie aber kann ich herausfinden ob
ein User sich den Datensatz nicht mehr anschaut? (Die
Oberfläche wird evt in Java realisiert) Bzw wie fange ich
Systemabstürtze etc ab? Hat einer von Euch eine Idee wie
man das mit einem INT in einer extra Spalte lösen kann?
Geht das überhaupt (ich glaube ja nicht)?
Prinzipiell koennte man das machen, indem man in einer Spalte
eine Integer-Zahl mitfuehrt, die man ueber eine Sequence
eindeutig haelt. Diese Integer-Zahl koennte dann der
Identifier fuer den Semaphore werden. Wenn sich jetzt jemand
den Datensatz anschaut, erzeugst du einen Semaphore, dessen
Identifier die Nummer des Datensatzes ist. Soll der Datensatz
jetzt geloescht werden, schaust du, ob der Semaphor existiert
oder nicht. Betrachtet der User den Datensatz nicht mehr,
zerstoerst du den Semaphor wieder. Du musst allerdings
aufpassen, du duerftest relativ zuegig an Systemgrenzen
stossen (man kann nicht unbegrenzt Semaphoren anlegen).
Deshalb ist es auch wichtig, den Semaphore in jedem Fall
wieder zu zerstoeren. Ich an deiner Stelle wuerde ausserdem
noch dafuer sorgen, dass die Semaphoren nach einem bestimmten
Alter (z. B. einer halben Stunde) automatisch wieder
zerstoert werden, um Deadlocks zu vermeiden.
Gruesse,
CK