>Вот кусок FreeBSDшного man pthread:
>PER-THREAD CONTEXT ROUTINES
> int pthread_key_create(pthread_key_t *key, void (*routine)(void *))
>
> Create a thread-specific data key.
>
> int pthread_key_delete(pthread_key_t key)
>
> Delete a thread-specific data key.
>
> void * pthread_getspecific(pthread_key_t key)
>
> Get the thread-specific value for
>the specified key.
> int pthread_setspecific(pthread_key_t key, const void *value_ptr)
>
> Set the thread-specific value for
>the specified key.
>
>Люди, объясните - что это за data key и чем он такой
>особенный?
>Я просто чувствую, что это может понадобиться для решения стояшей передо мной
>задачи, но не могу разобраться - что это.
>Маны непосредственно по функциям я прочитал, но это ничего не прояснило.
>
>Буду очень благодарен, если мне кто-нить по-русски объяснит - что это такое.
>
В отличие от процессов, все потоки делят одно адресное пространство.
Тем не менее у каждого потока свой собственный стеквызова.
При каждом вызове функции в любом потоке создаются свои локальные переменные, которые сохраняются в стеке этого потока.
Иногда все же требуется продублировать глобальную переменную, чтобы у каждого потока была ее собственная копия, с этой целью вам предоставляется ОБЛАСТЬ ПОТОКОВЫХ ДАННЫХ. Все переменные из потоковых данных должны иметь тип void*, ссылка на каждую переменную осуществляется по ключу, для создания нового ключа, т.е. новой переменной используется функция pthread_key_create().
|