スレッド固有のデータのウィジェット.


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つのスレッドが一意の(他のスレッドも知らない)グローバル変数を使用することをよりよく実現することができる.
#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という方法が使われているかどうか.