pthread dataspecific がどのように機能するかはわかりません。次のコード (Web で見つかります) を考慮すると、これは、たとえばメインで 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);
}
...
}
dataspecific がどのように機能するか、および pthread でどのように実装されているか (簡単な方法) についての説明をいただければ幸いです。