Частные переменные в темах - PullRequest
2 голосов
/ 10 февраля 2012

Я начинаю использовать pthreads с C в Linux. Мне нужно создать и использовать частные переменные потока .

Позвольте мне объяснить, что именно мне нужно, на примере. В следующем фрагменте кода я создаю 4 потока, я хотел бы, чтобы каждый из них создал приватную переменную foo, то есть всего 4 foo переменных, по одной для каждого потока. Каждый поток должен «видеть» только свою собственную переменную foo, а не остальные. Например, если поток 1 устанавливает foo = 56, а затем вызывает doStuff, doStuff должен вывести 56. Если поток 2 устанавливает foo = 99, а затем вызывает doStuff, doStuff должен вывести 99. Но если поток 1 снова вызывает doStuff, 56 должен быть напечатан снова.

void doStuff()
{
  printf("%d\n", foo); // foo is different depending on each thread
}

void *initThread(void *threadid)
{
  // initalize private thread variable (foo) for this thread
  int foo = something;

  printf("Hello World! It's me, thread #%ld!, %d\n", (long) threadid, x);
  doStuff();
}

int main()
{
   pthread_t threads[4];

   long t;
   for (t = 0; t < 4; t++){
     printf("In main: creating thread %ld\n", t);
     pthread_create(&threads[t], NULL, initThread, (void *) t);
   }

   pthread_exit(NULL); /* support alive threads until they are done */
}

Любые идеи о том, как это сделать (что в основном является идеей переменных частных потоков) с использованием pthreads?

1 Ответ

4 голосов
/ 10 февраля 2012

Я полагаю, вы ищете термин Thread Local Storage .Проверьте документацию для pthread_get_specific, pthread_get_specific , pthread_create_key или используйте спецификатор класса хранения потока __ .

Другой вариант - иметь одну глобальную переменнуюи используйте мьютекс или просто передайте foo в качестве аргумента.

...