Beendigung von Threads - Cancellation
Submitted by rac on 13 January, 2008 - 16:35.
Warum?
- Ressourcen zurückholen, wenn Thread nicht mehr gebraucht wird
- z.B. Parallele Suche in DB
- Cancellability State : J/N
- Cancellability Type : asynchron/verzögert (deferred)
- Warum nicht? Probleme
- Daten Konsistenz -> zurücksetzen
- Locks -> freigeben
- Thread sollte nur an sicheren Punkten "cancellable" sein
- Zu jedem Thread gehört ein "Cleanup Stack"
Cancellation Typen und Zustände
- Thread setzt seine Cancellability selbst
- Wechseln möglich und sinnvoll
- Cancellability kann nur dynamisch zur Laufzeit gesetzt werden
- Default: enabled, deferred cancellation
- verzögerte Cancellation
- Thread muss zuerst einen Cancel Point erreichen
Cancellation Points
- State: enabled, Type: deferred
- Automatic Cancellation Points
- pthread_cond_wait
- pthread_cond_timedwait
- pthread_join
- sigwait
- (blockierende Aufrufe)
- Vom Programmierer bestimmte Cancellation Points
- pthread_testcancel
- am besten vor CPU intensiven Arbeiten
- Cancellation Points bei System und Library Aufrufen
- Achtung: wenn CANCEL_ASYNC
- Cancellation auch während
- System und Bibliotheksaufrufen!
- wenn Bibliothek nicht async-cancel sicher ist, vorher CANCEL_ASYNC ausschalten
- Cancellation auch während
- Achtung: automatische Cancel Points, können das Konzept durcheinander bringen
- wenn Code Abschnitte davon abhängen, keinen Cancelpoint zu haben, sollte dies explizit dokumentiert werden (/* ... */)
- blockierende Aufrufe -> Cancel Point
- System oder Bibliotheken können auch Cancel Points enthalten!
»
- Printer-friendly version
- Download PDF
- 768 reads

Post new comment