我還是多執行緒編程的新手,我不太明白為什么pthread_cleanup_push并且pthread_cleanup_pop僅在呼叫執行緒時使用,而呼叫pthread_exit()不需要清理。為什么?
uj5u.com熱心網友回復:
執行緒取消清理處理程式(即what pthread_cleanup_push/ manage)的目的是在取消執行緒時pthread_cleanup_pop執行用戶定義的資料和執行緒使用的結構的清理。由于取消通常是一種例外終止方法,因此您可以在執行緒被取消時注冊處理程式以“清理”,因為執行緒在被終止之前將無法自行執行此操作。
例如,假設您在兩個執行緒 A 和 B 之間共享一個互斥鎖。執行緒 A 獲取鎖,然后在有機會釋放它之前被取消。然后執行緒 B 嘗試獲取鎖,但由于 A 從未(也永遠不會)釋放鎖而無限期地卡住。為避免這種情況,使用執行緒取消清理處理程式,您可以確保當 A 被取消時,互斥鎖被釋放。
在正常情況下,例如return來自執行緒或pthread_exit(),假設不需要這樣的清理程序,因為它是執行緒本身決定何時退出,并且在退出之前完全控制要做什么,所以任何清理 - up 可以很容易地執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516680.html
標籤:C多线程并发
