[BS] Probleme mit Semaphoren im Zusammenspiel mit kill()

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

[BS] Probleme mit Semaphoren im Zusammenspiel mit kill()
Hat jemand von euch die Semaphoren fertig?

Wir haben hier nämlich ein kleines Problem, welches wir nicht nachvollziehen können.

Wir haben mehrere Threads am laufen, die jeweils um das kout ein p() und v() haben. Funktioniert an sich prächtig, nur wenn ein Thread von einem anderen gekillt wird, dann läuft nur noch der killende Thread weiter. Der gekillte wird zwar wirklich wie beabsichtigt gekillt, aber leider auch ein dritter Thread.

Was allerdings verwunderlich ist: Wenn man beim zu killenden Thread das p() und v() ums kout weglässt, funktioniert das kill() so wie es soll.

Hat jemand eine Idee oder eine Vermutung, woran das liegen könnte?


Erstmal kenn ich eure Aufgabenstellung gar net, drum kann ich da recht wenig drüber sagen, aber du solltest mal nachdenken, welchen thread das signal wirklich trifft, bzw. treffen kann. Signale werden ja Prozessen zugestellt und wenn dieser Prozess mehrere Threads hat, kann es auch einen treffen, wo man dies nicht erwartet. Drum sollte man lieber die Kommuikationsfunktionen der thread Bibliothek nutzen bzw. sich entsprechende signalhandler bauen.


cool, in OOStubs gibts seit neuestem eine Thread-Bibliothek?


Bibliothek? Signale? Nene :wink:

Ein kill() trägt einen Prozess aus der ready-Queue aus, das wars.
Deswegen wundert uns das verhalten ja auch so


Ah OOstubs, da daemmert was - an ein kill kann ich mich da allerdings nicht erinnern sorry.


Überprüft ihr eigentlich, ob der zu killende gerade läuft und macht dann statt dessen ein exit() ? Falls sich mal einer mit Selbstmordgedanken trägt…

Passt jetzt zwar nicht ganz zu dem Problem, aber das ist mir dazu gerade eingefallen…

Zum Problem: könnte es sein, das ihr einen falschen Prozess aus der Warteschlange holt?