我不确定 pthread dataspecific 是如何工作的:考虑到下一个代码(在网上找到),这是否意味着我可以在主线程中创建例如 5 个线程,只在其中一些线程中调用 func(比如说 2 ) 这些线程会将数据“键”设置为某个值 (ptr = malloc(OBJECT_SIZE) ),而其他线程将具有相同的键,但具有 NULL 值?
static pthread_key_t key;
static pthread_once_t key_once = PTHREAD_ONCE_INIT;
static void
make_key()
{
(void) pthread_key_create(&key, NULL);
}
func()
{
void *ptr;
(void) pthread_once(&key_once, make_key);
if ((ptr = pthread_getspecific(key)) == NULL) {
ptr = malloc(OBJECT_SIZE);
...
(void) pthread_setspecific(key, ptr);
}
...
}
关于数据特定的工作原理以及它如何在 pthread 中实现(简单方式)的一些解释将不胜感激!