标签: pthread-key-create

pthread_key_t和方法pthread_key_create如何工作?

我在弄清楚pthread_key_t和pthread_key_create如何工作时遇到了一些麻烦.据我所知,每个线程都有TLS(线程本地存储),并且一个密钥用于访问线程本地存储.我没有得到的是当创建一个密钥时,每个线程都可以使用它吗?让我们说线程0创建密钥0,线程1可以使用密钥0吗?如果线程1使用键0,它是否会访问自己的TLS或线程0的TLS?

是否有一些全局数组或某些东西可以跟踪所使用的所有密钥?

pthreads thread-local pthread-key-create

7
推荐指数
1
解决办法
4280
查看次数

如何正确使用线程特定数据

我正在使用 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

3
推荐指数
1
解决办法
1万
查看次数