簡體   English   中英

為什么要破壞pthread_cond_t和pthread_mutex_t?

[英]Why destroy pthread_cond_t and pthread_mutex_t?

如果在線程代碼中,我創建了一個pthread_cond_t c; 條件變量或互斥量pthread_mutex_t m; 在C中,建議在完成所有工作后銷毀它們。

為什么會這樣?

另外,為什么在使用pthread_cond_init();動態初始化cond變量時必須銷毀它pthread_cond_init(); 功能。

引用David Butenhof“ 用POSIX線程編程

“當你動態初始化一個條件變量時,你應該在你不再需要它時通過調用pthread_cond_destroy來銷毀條件變量。你不需要銷毀一個使用PTHREAD_COND_INITIALIZER宏靜態初始化的條件變量”

pthread_cond_t和pthread_mutex_t被視為資源。

完成后,您需要銷毀/清理/關閉資源,就像您需要關閉文件或釋放文件一樣。 如果不這樣做會導致資源泄漏,您可能會耗盡這些資源。

將這些作為資源處理使得實現更加自由地實現它們,並且在某些特定實現上,忘記_destroy()它們可能沒有壞處,其他人可能將互斥/條件變量連接到需要的內核資源。當你不再需要它時要清理干凈。 pthread_mutex_init的基本原理部分提供了更多概述,同樣適用於條件變量

如果使用PTHREAD_COND_INITIALIZER初始化條件變量,則應該初始化靜態分配的互斥鎖,即它將一直存在直到應用程序結束,此時它將被系統銷毀,可能是作者的意思。 這適用於動態初始化的互斥鎖/ cond變量,系統也會清理它們。

當應用程序結束時,大多數資源會自動清理,因此,在這種情況下手動清理所有內容或僅讓系統執行此操作是否是一種好的做法是另一種討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM