コードのスニペットは次のとおりです。
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() に渡す必要があります。