下面是代码片段:
pthread_create(&worker->thread, NULL, EagleWorker_begin, worker);
void* EagleWorker_begin(void *obj)
{
EagleWorker *worker = (EagleWorker*) obj;
}
这很好用,但是有没有办法obj
从当前线程中恢复,而不必一直通过每个函数?
下面是代码片段:
pthread_create(&worker->thread, NULL, EagleWorker_begin, worker);
void* EagleWorker_begin(void *obj)
{
EagleWorker *worker = (EagleWorker*) obj;
}
这很好用,但是有没有办法obj
从当前线程中恢复,而不必一直通过每个函数?
是的。您可以使用线程特定数据(线程本地存储)来制作线程范围的“全局变量”。线程代码可以像普通全局变量一样访问这些。但是每个线程都有自己的全局空间。
尝试这个。
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()。