2016-04-07 6 views
-1

指定されたフレームワークは、私の関数PartialCodecを呼び出しています。pthreadによって呼び出されるスレッドを区別する

pthread_create(&(pcPthread[iTd]),NULL,PartialCodec,(void *)&pcMCData[iTd]); 

フレームワークコードを変更することはできません。しかし、内部でPartialCodec私は別のスレッドに異なるタスクを割り当てたいので、私は各スレッドを区別する必要があります。これどうやってするの?

+0

ここに秘密はありません。 'void *(*)(void *)' - 引数は、スレッドがどの関数を起動するかを決定します.2、 'void *'は、その関数の引数を決定しますされます。 – EOF

+0

すべてのスレッドはPartialCodec関数に自動的に入り、引数はすべてのスレッドで同じです –

+1

あなたはすべてのコードを表示していませんが、 'iTd'はスレッドごとに異なると仮定しています。 'pcMCData'の要素に追加します。 – jxh

答えて

0

引数Lukeを使用します。

スレッド引数として&pcMCData[iTd]を渡しています。

そのような構造にいくつかのフィールドを追加して、どのタスクを処理するかをスレッドに伝えるだけです。 (そして、明らかにスレッドを作成する前に、これらのフィールドを設定)

pcMCData[iTd].thingToWorkOn = /* however you decide the thing to work on */; 
pthread_create(&(pcPthread[iTd],NULL,PartialCodec,(void *)&pcMCData[iTd]); 
+0

これは実際に私のプロジェクトの一部であり、変更してはいけないコードセットが提供されています。私はPartialCodec関数の中でしか書くことができません。 –

+0

それで、おそらく、「他の誰かが 'pthread_create()'を使ってスレッドを起動しています..." –

+0

私の教授がスレッドを起動するコードを書いたので、変更する必要はありません –

1

あなたがPartialCodecを呼び出すされますどのように多くのスレッドを知っていると仮定すると、あなたは、スレッド間の通信を容易にするために、関数内static変数を使用することができます。裸のstaticは、PartialCodecのすべてのスレッドが同じオブジェクトインスタンスを操作できるようにします。

void * PartialCodec (void *arg) { 
    static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 
    static struct state { 
     /* some state */ 
    } critical; 
    struct state local; 

    pthread_mutex_lock(&lock); 
    local = critical; /* make a local copy */ 
    /* update critical */ 
    pthread_mutex_unlock(&lock); 

    /* ... refer to local copy of state ... */ 
} 

critical状態は、特定のスレッドが解決すべき問題の部分を追跡します。それをlocalにコピーすると、そのスレッドが問題のその部分で動作することが確立されます。 criticalの状態が更新され、次のスレッドcriticalが問題の別の部分を処理することがわかります。

関連する問題