线程中的私有变量

时间:2012-02-10 02:30:04

标签: c multithreading pthreads multicore

我是Linux中使用pthreads和C的先行者。我需要创建和使用私有线程变量

让我用一个例子来解释我需要什么。在下面的代码中我创建了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 个答案:

答案 0 :(得分:4)

我相信您正在寻找Thread Local Storage这个词。查看pthread_get_specific, pthread_get_specificpthread_create_key的文档或使用__thread storage class specifier

另一种选择是使用单个全局变量并使用互斥锁,或者只是将foo作为参数传递。