Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

1

11.07.2008, 11:04

pthread timeout bei join oder mutex lock

Hallo allerseits,

ich hab nun schon 2 mal mittels Deadlock den Server lahmgelegt und damit ich nicht immer zum Admin rennen muss um den Server neuzustarten (killen funktioniert hier auch nicht mehr) bin ich am überlegen ob man eine Art Timeout für Wartevorgänge realisieren kann.

Das Programm soll bei pthread_join(thread) maximal 1 sekunde lang warten und sonst den thread killen. Genauso bei Conditions/Mutexes: pthread_cond_wait() soll auch maximal n sekunden warten und sonst auch den thread killen.

Mit while(thread active) nsleep(10); ist das sicherlich kein Problem, aber ich würde gerne ohne busy wait auskommen und join/mutexes/signale verwenden.

Ist sowas möglich? Ich versuche Deadlocks auszuschließen so gut es geht, aber es scheint irgendwie nicht immer möglich zu sein (aber dazu müsste ich das komplette Programm erläutern und das führt hier zu weit).

Gruß,
Dennis

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

11.07.2008, 11:24

Ein Thread sollte man nicht von Aussen 'abschießen'. Selbst _wenn_ der Thread in einem Deadlock festhängt (dann sollte man den Deadlock loswerden [ich weiß das kann extrem Nervtötend sein]) sollte der Thread nicht einfach beendet werden. Es kann z.B. durchaus sein das der Thread noch kritischen Code (davon geh ich aus, wenn gelockt wird) ausführt. Dann nämlich ist das abwürgen von einem solchen Thread eine extrem schlechte Idee.
@D13_Dreinig

xardias

Community-Fossil

  • »xardias« ist der Autor dieses Themas

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

3

11.07.2008, 12:08

Naja wenn ich den Thread abwürde werde ich gleichzeitig das ganze Programm abwürgen, daher ist das nicht das Problem.

Eventuell poste ich mal ins IBM Forum, da ich denke, dass die Deadlocks was mit der CBEA zu tun haben. Ich fordere sämtliche verfügbaren SPUs der Cell Prozessoren im System an, mit Nebenbedingungen bezüglich der Lage der SPUs.
In manchem Fällen scheint die Verteilung nicht richtig zu Funktionieren und meine Threads warten darauf, dass die SPUs gestartet werden, was aber nicht passiert. So warte ich mich dann zu Tode und muss das Programm irgendwie wieder Beendet bekommen.

Daher halt meine Idee mit dem Timeout.
Momentan benutze ich vorrübergehend Busy Wait mit einem Schwellwert der das Warten abbricht sobald eine gewisse Zeit gewartet wurde. Aber schön ist die Lösung sicher nicht.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

11.07.2008, 12:12

Zitat von »"xardias"«


Momentan benutze ich vorrübergehend Busy Wait mit einem Schwellwert der das Warten abbricht sobald eine gewisse Zeit gewartet wurde. Aber schön ist die Lösung sicher nicht.


Das wär jetzt mein Vorschlag, für dieses Spezielle Problem, gewesen. Auf jedenfall schöner als den Thread einfach abzuschießen.
@D13_Dreinig

5

11.07.2008, 13:23

Du hast wahrscheinlich ein Multithreaded-Designfehler. Falls du ueberpruefen willst, ob dein Entwurf Deadlock- und Starvationfrei ist, gibt es einge Moeglichkeiten. Petrinetze sind da eine Moeglichkeit.

Werbeanzeige