簡體   English   中英

主線程的銷毀順序和使用pthread_key_create

[英]Destruction order of the main thread and the use of pthread_key_create

我想知道在傳遞析構函數時使用pthread_key_create

我想要這樣的東西:

static ComplexObject foo;

void workoncomplex(void *) {
    foo.dosomestuff();
}

static pthread_key_t pthreadkey;

void function_called_by_threads() {
    pthread_key_create(&pthreadkey, workoncomplex)
}

顯然,我省略了很多細節。

對於不是主線程的任何線程,這顯然都很好(提供了鎖定等),並且每當線程死亡時,都會調用我的workoncomplex函數並操作foo對象。

我的問題是,這對主線程是否有效,因為顯然銷毀線程的pthreadkey調用了析構函數,但是可以保證在析構靜態變量之前運行它嗎? 如果是這樣,我是否必須檢查我是否在主線程中並立即返回? 或者我可以將所有線程都一樣對待,並假設我的靜態對象仍然存在。

在應用程序退出時不調用析構函數。 僅在線程退出時調用。

如果使用pthread_exit()退出主線程,則將調用析構函數,但是該應用程序尚未關閉,因此可以安全地使用static變量。

如果調用exit()或從main()返回,則不會調用析構函數,因此static變量被銷毀的事實不是問題。 使用atexit()以確保在從main()返回或調用exit()調用析構函數。

暫無
暫無

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

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