pthread我可以得到原始论点吗?

时间:2013-05-08 11:52:44

标签: c++ c multithreading pthreads

下面是代码片段:

pthread_create(&worker->thread, NULL, EagleWorker_begin, worker);

void* EagleWorker_begin(void *obj)
{
    EagleWorker *worker = (EagleWorker*) obj;
}

这样可以正常工作,但有没有办法从当前线程恢复obj而不必将其全部传递给每个函数?

1 个答案:

答案 0 :(得分:4)

是。您可以使用特定于线程的数据(线程本地存储)来创建线程范围的“全局”。线程代码可以像普通的全局变量一样访问它们。但每个线程都有自己的全局空间。

试试这个。

pthread_create(&worker->thread, NULL, EagleWorker_begin, worker);

__thread EagleWorker *worker;

void* EagleWorker_begin(void *obj)
{
    worker = (EagleWorker*) obj;

    foo();
}

void foo()
{
    worker->whatever = whatever;
}

您仍然需要确保为每个线程分配EagleWorker并将其传递给pthread_create()。