[英]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.