我在弄清楚pthread_key_t和pthread_key_create如何工作时遇到了一些麻烦.据我所知,每个线程都有TLS(线程本地存储),并且一个密钥用于访问线程本地存储.我没有得到的是当创建一个密钥时,每个线程都可以使用它吗?让我们说线程0创建密钥0,线程1可以使用密钥0吗?如果线程1使用键0,它是否会访问自己的TLS或线程0的TLS?
是否有一些全局数组或某些东西可以跟踪所使用的所有密钥?
我正在使用 pthread 进行编程。我需要一个全局变量,它对于不同的线程具有不同的值。线程将使用相同的函数来处理该变量,例如更改其值。如果一个线程改变了它的值,其他线程中的值不会改变。所以我尝试使用线程特定数据,并编写了一个示例。我需要将 pthread 操作包装在函数中。例如:setspecific()、changedata、printdata()、create_key()、delete_key() 等。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_key_t key;
pthread_key_t key2;
struct test_struct {
int i;
float k;
}struct_data;
int temp;
int setspecificvar () { /* Set specific data for threads */
pthread_setspecific (key, &struct_data);
pthread_setspecific (key2, &temp);
return 0;
}
int changedata (int i, float k, int tempvar) { /* Change specific data for threads */
temp = tempvar;
struct_data.i = i;
struct_data.k = k;
return 0;
}
int printdata (int t) { /* …Run Code Online (Sandbox Code Playgroud) multithreading pthreads global-variables thread-specific-storage pthread-key-create