The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"pthread_key_create... - что это, и с чем это едят?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"pthread_key_create... - что это, и с чем это едят?"
Сообщение от David emailИскать по авторуВ закладки on 15-Фев-03, 19:22  (MSK)
Вот кусок 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 и чем он такой особенный?
Я просто чувствую, что это может понадобиться для решения стояшей передо мной задачи, но не могу разобраться - что это.
Маны непосредственно по функциям я прочитал, но это ничего не прояснило.

Буду очень благодарен, если мне кто-нить по-русски объяснит - что это такое.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: pthread_key_create... - что это, и с чем это едят?"
Сообщение от Nekto emailИскать по авторуВ закладки on 15-Фев-03, 21:52  (MSK)
>Вот кусок 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().

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: pthread_key_create... - что это, и с чем это едят?"
Сообщение от David emailИскать по авторуВ закладки on 16-Фев-03, 18:19  (MSK)
>В отличие от процессов, все потоки делят одно адресное пространство.
>Тем не менее у каждого потока свой собственный стеквызова.
>При каждом вызове функции в любом потоке создаются свои локальные переменные, которые
>сохраняются в стеке этого потока.
>Иногда все же требуется продублировать глобальную переменную, чтобы у каждого потока была
>ее собственная копия, с этой целью вам предоставляется ОБЛАСТЬ ПОТОКОВЫХ ДАННЫХ.
>Все переменные из потоковых данных должны иметь тип void*, ссылка на
>каждую переменную осуществляется по ключу, для создания нового ключа, т.е. новой
>переменной используется функция pthread_key_create().

Спасибо, но не совсем понятно. Давайте на примере, чем отличаются следующие функции?:
1)
void* tread_function (void *arg)
{
  void *ptr;
  ptr = malloc (50);
  free (ptr);
  return NULL;
}
///////////
2)
/* где-то там в программе */
pthread_key_t *key; // глобальная переменная
pthread_key_create (key, NULL);
/* функция потока */
void* tread_function (void *arg)
{
  void *ptr;
  ptr = malloc (50);
  pthread_setspecific (key, ptr);
  free (ptr);
  return NULL;
}
/////////////
Кстати - память для key - выделяет функция или самому надо?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: pthread_key_create... - что это, и с чем это едят?"
Сообщение от Nekto emailИскать по авторуВ закладки on 16-Фев-03, 21:29  (MSK)
>>В отличие от процессов, все потоки делят одно адресное пространство.
>>Тем не менее у каждого потока свой собственный стеквызова.
>>При каждом вызове функции в любом потоке создаются свои локальные переменные, которые
>>сохраняются в стеке этого потока.
>>Иногда все же требуется продублировать глобальную переменную, чтобы у каждого потока была
>>ее собственная копия, с этой целью вам предоставляется ОБЛАСТЬ ПОТОКОВЫХ ДАННЫХ.
>>Все переменные из потоковых данных должны иметь тип void*, ссылка на
>>каждую переменную осуществляется по ключу, для создания нового ключа, т.е. новой
>>переменной используется функция pthread_key_create().
>
>Спасибо, но не совсем понятно. Давайте на примере, чем отличаются следующие функции?:
>
>1)
>void* tread_function (void *arg)
>{
>  void *ptr;
>  ptr = malloc (50);
>  free (ptr);
>  return NULL;
>}
>///////////
>2)
>/* где-то там в программе */
>pthread_key_t *key; // глобальная переменная
>pthread_key_create (key, NULL);
>/* функция потока */
>void* tread_function (void *arg)
>{
>  void *ptr;
>  ptr = malloc (50);
>  pthread_setspecific (key, ptr);
>  free (ptr);
>  return NULL;
>}
>/////////////
>Кстати - память для key - выделяет функция или самому надо?

зачем делать malloc ? это вообще неправильно ..
а ptr - переменная локализованная в функции, поэтому она вне конкуренции ..
key - глобальная переменная .. вот и вся разница

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: pthread_key_create... - что это, и с чем это едят?"
Сообщение от Nekto emailИскать по авторуВ закладки on 16-Фев-03, 21:30  (MSK)
>Кстати - память для key - выделяет функция или самому надо?

самому ничего не надо :))
А можно встречный вопрос ? Как это может быть ?:)
``Я не знаю что это, но чувствую, что это мне понадобится ...'' :))
странно ..


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: pthread_key_create... - что это, и с чем это едят?"
Сообщение от SergeiZz Искать по авторуВ закладки on 18-Фев-03, 19:03  (MSK)
>>Кстати - память для key - выделяет функция или самому надо?
>
>самому ничего не надо :))
>А можно встречный вопрос ? Как это может быть ?:)
>``Я не знаю что это, но чувствую, что это мне понадобится ...''
>:))
>странно ..

Нет ничего тут странного, между рочим. Можно ответить "Интуиция", например.
Вообще, к подобным ощущениям очень важно внимательно относиться.
У нейропсихолога лучше спросить почему.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру