是否合法作出atexit
電話pthread_exit
?沒有它時main()
返回所有的線程被終止。 (瑣細的解決辦法是修改main()
打電話pthread_exit()
本身,而這是不可能在這個小例子,從獲得的情況下)。使用的atexit調用了pthread_exit
#include <unistd.h>
#include <cstdlib>
#include <iostream>
#include <pthread.h>
void *foo(void *data) {
for (int i = 0; i < 10; ++i) {
std::cout << i << "\n";
sleep(1);
}
return NULL;
}
void foo_init() {
std::atexit([](){
pthread_exit(NULL);
});
}
int main() {
foo_init();
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_t thr;
pthread_create(&thr, &attr, foo, NULL);
}
爲pthread_exit
狀態的手冊頁:
線程終止不釋放任何應用程序可見的進程資源,包括但不限於,互斥體和文件描述符,也不會執行任何進程級別的清理動作,包括但不限於調用任何可能存在的atexit()例程。
這似乎排除瘋狂遞歸破壞事物的風險。
報告還指出:
了pthread_exit的行爲()是不確定的,如果從被援引作爲隱式或顯式調用的結果了pthread_exit取消清理處理或析構函數稱爲()。
這表明有地方將是不確定的調用pthread_exit
地方,但(除非主需要> 10秒的回報,這讓我們假設是不可能的「真實」情況)不適用。
這個例子「爲我的作品」,但需要通過POSIX工作?如果不是未定義或未指定?