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 に答える