スレッド固有のデータのウィジェット.
1667 ワード
thread-specific dataは、1つのスレッドがグローバル変数で目的を達成しようとするが、複数のスレッド間でグローバル変数をうまく共有できないため(ここでは同期問題に関連し、because multiple threads cannot use the buffer to hold different things at the same time.).同じプロセスのスレッド間でどのようにデータを共有しているのか、まだ理解していません.thread-specific dataは適用されませんか?thread-specific dataはまた、「この方法は、1つのスレッドが一意の(他のスレッドも知らない)グローバル変数を使用することをよりよく実現することができる.
このプログラムでは、関数Aと関数Bがメモリ領域を共有し、このメモリ領域は呼び出しAとBスレッドに固有である.他のスレッドでは、このメモリ領域は表示されません.これにより、スレッド内の各関数間でデータを共有する目的を安全かつ効果的に達成できます.
ああ、やっと分かりました.共有データはスレッドの各関数にとってです.異なるスレッド間ではありません.異なるスレッド間でデータを共有するにはthread-specific dataという方法が使われているかどうか.
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define LEN 100
pthread_key_t key;
void A(char *s){
char *str = (char *) pthread_getspecific(key);
printf("Address:%d", pthread_getspecific(key));
strncpy(str, s, LEN);
}
void B( ){
char *str = (char *) pthread_getspecific(key);
printf("Address:%d", pthread_getspecific(key));
printf("%s
", str);
}
void destructor( void *ptr){
free(ptr);
printf("memory freed
");
}
void *threadfunc1(void *pvoid){
pthread_setspecific(key, malloc(LEN));
A("Thread1");
B();
}
void *threadfunc2(void *pvoid){
pthread_setspecific(key, malloc(LEN));
A("Thread2");
B();
}
int
main()
{
pthread_t tid1, tid2;
pthread_key_create(&key, destructor);
pthread_create(&tid1, NULL, &threadfunc1, NULL);
pthread_create(&tid2, NULL, &threadfunc2, NULL);
pthread_exit(NULL);
return 0;
}
このプログラムでは、関数Aと関数Bがメモリ領域を共有し、このメモリ領域は呼び出しAとBスレッドに固有である.他のスレッドでは、このメモリ領域は表示されません.これにより、スレッド内の各関数間でデータを共有する目的を安全かつ効果的に達成できます.
ああ、やっと分かりました.共有データはスレッドの各関数にとってです.異なるスレッド間ではありません.異なるスレッド間でデータを共有するにはthread-specific dataという方法が使われているかどうか.