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: Select all
/* 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 Wink
... und Ihr könnt mir wieder mal helfen.
Vielen Dank im vorraus
Gruss Christian