ich habe hier mal wieder eine Frage die NICHT Debian-Spezifisch ist, aber da ich hier immer gute, <schleim> wenn nicht sogar die beste </schleim> Hilfe bekommen habe versuche ich es mal.
Allllsoooo:
ich möchte eine Semaphore löschen, die von mehreren Prozessen genutzt wird. Prozess A erzeugt eine Semaphore, schreibt die Semaphren-ID in eine Datei und macht sich dann an die Arbeit. Prozess B und C öffnen die Datei lesen die Semaphor-Kennung und greifen auf die Semaphore zu. Das klappt alles wunderbar.
Das Problem ist, wenn Prozess A mit seiner Arbeit fertig ist, löscht er die Semaphore wobei aber Prozess B und C immer noch versuchen darauf zuzugreifen.
Ich habe dazu folgende Löschfunktion geschrieben:
Code: Alles auswählen
/* Loeschen einer Semaphore */
int loesche_semaphore ( int kennung )
{
union semun mysem;
int semnum = 0,
rueckgabe_1 = 0,
rueckgabe_2 = 0;
while ( 1 )
{
if ( ( rueckgabe_1 = semctl ( kennung, semnum, GETZCNT, mysem ) ) == -1 )
{
perror ( "Fehler beim bestimmen der Semaphor-Wartelist\n" );
exit ( errno );
}
else if ( ( rueckgabe_2 = semctl ( kennung, semnum, GETNCNT, mysem ) ) == -1 )
{
perror ( "Fehler beim bestimmen der Semaphor-Wartelist\n" );
exit ( errno );
}
else
{
printf ( "Die Menge der Prozesse ist gleich: %d und %d \n", rueckgabe_1, rueckgabe_2 );
break;
}
}
if ( ( semctl ( kennung, 0, IPC_RMID, mysem ) ) == -1 )
{
perror ( "Fehler beim loeschen der Semaphore\n" );
exit ( errno );
}
return ( 1 );
}
Also wie kann ich feststellen, daß ein oder mehrere Prozesse auf die Semaphore zugreifen?
Ich hoffe ich habe meine Problematik einigermaßen Verständlich wiedergegeben
... und Ihr könnt mir wieder mal helfen.
Vielen Dank im vorraus
Gruss Christian