為何執行緒的入口要加Autorelease Pool

2021-09-05 01:24:57 字數 737 閱讀 6496

我們經常會在一些第三方庫中看到這種情況,執行緒的入口加上autorelease pool,這是為何?

int main(int argc, char * argv) 

}

執行緒的生命週期:

在任何乙個時間點上,執行緒是可結合的(joinable),或者是分離的(detached)。乙個可結合的執行緒能夠被其他執行緒收回其資源和殺死;在被其他執行緒**之前,它的儲存器資源(如棧)是不釋放的。相反,乙個分離的執行緒是不能被其他執行緒**或殺死的,它的儲存器資源在它終止時由系統自動釋放。

執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在預設情況下執行緒是非分離狀態的,這種情況下,原有的執行緒等待建立的執行緒結束。只有當pthread_join()函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。而分離執行緒不是這樣子的,它沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止了,馬上釋放系統資源。程式設計師應該根據自己的需要,選擇適當的分離狀態。所以如果我們在建立執行緒時就知道不需要了解執行緒的終止狀態,則可以pthread_attr_t結構中的detachstate執行緒屬性,讓執行緒以分離狀態啟動。

由此可知,執行緒占用的資源要釋放的前提是執行緒終止,如果加了autoreleasepool相關物件會在pool執行完畢後釋放,避免過多的延遲釋放造成程式占用過多的記憶體。如果是乙個長壽命的執行緒的話,應該建立更多的autorelease pool來達到這個目的。例如執行緒中用到了run loop的時候,每一次的迭代都需要建立autorelease pool。

C 類的執行緒函式為什麼要加static修飾

首先看下面這個類 class cmytest void main threadfun lpvoid 為什麼要加static修飾呢!原來非靜態成員函式都會在引數列表中加上乙個this指標為為引數,這樣的話你寫的執行緒函式就不符合呼叫規定了.比如 dword winapi threadfun lpvoi...

類中pthread create 的執行緒入口函式

在類成員函式中如何呼叫pthread create 呢?incldue int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg 可看到入口函式的指標是void 型別的...

程序的入口函式 執行緒程序的關係

結束整個應用程式,子執行緒要結束的話 return執行緒函式。程序的入口函式中,result main exit result 直接就關閉應用程式,結束程序了。所以,無論哪個執行緒執行exit 程序都會結束。exit與return的區別?多執行緒情況下,主線程先退出,子執行緒會被強制退出嗎?main...