2

下面是代码片段:

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

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

这很好用,但是有没有办法obj从当前线程中恢复,而不必一直通过每个函数?

4

1 回答 1

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()。

于 2013-05-08T12:22:01.067 回答