根据pthread_key_create手册页,我们可以关联一个析构函数,以便在线程关闭时调用。我的问题是我注册的析构函数没有被调用。我的代码要点如下。
static pthread_key_t key;
static pthread_once_t tls_init_flag = PTHREAD_ONCE_INIT;
void destructor(void *t) {
// thread local data structure clean up code here, which is not getting called
}
void create_key() {
pthread_key_create(&key, destructor);
}
// This will be called from every thread
void set_thread_specific() {
ts = new ts_stack; // Thread local data structure
pthread_once(&tls_init_flag, create_key);
pthread_setspecific(key, ts);
}
知道什么可能会阻止调用此析构函数吗?我现在也在使用 atexit() 在主线程中进行一些清理。是否有可能干扰调用析构函数?我也尝试删除它。仍然没有工作。我也不清楚我是否应该将主线程作为一个单独的案例与 atexit 一起处理。(顺便说一句,必须使用 atexit,因为我需要在应用程序退出时进行一些特定于应用程序的清理)