下面是代码片段:
pthread_create(&worker->thread, NULL, EagleWorker_begin, worker);
void* EagleWorker_begin(void *obj)
{
EagleWorker *worker = (EagleWorker*) obj;
}
这样可以正常工作,但有没有办法从当前线程恢复obj
而不必将其全部传递给每个函数?
答案 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()。