更加详细的内容查看man手册或百度,这里只是几个实际测试的结果。仅代表实验现象,并不考虑实现原理。
-
pthread_key_t
key可以定义为全局变量,全局变量属于所有线程共有的。在不同的线程中可以用pthread_setspecific为key绑定不同的实际数据,在每个线程中key指向的实际数据是线程私有的。
-
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
create不是创建key,而是为key注册一个销毁数据的destructor。
在一个线程中,同一个key可以多次create注册destructor,最后一次注册会覆盖前面的注册。子线程会继承创建它的线程所注册的destructor,但子线程也可以再次调用create函数重新注册其他destructor。因此不同的线程同一个key可以注册不同的destructor。
-
int pthread_key_delete(pthread_key_t key);
delete不是销毁key,而是解除本线程key的绑定,也不会调用destructor来销毁绑定的数据。delete不会影响其他线程。
-
void (*destructor)(void*)
子线程注册的destructor会在结束时自动调用,主线程需要在线程结束时调用pthread_exit()主动结束线程才能调用destructor。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)