2016-03-30 12 views
3

私は、スレッドプログラムの流れを制御するために、Cでバリアを作成できることを知っています。バリアを初期化し、スレッドが使用するようにしてから、それを破棄することができます。しかし、同じ障壁が再利用できるかどうかはわかりません(ループしている場合など)。または、2番目の待機点に新しいバリアを使用する必要がありますか?例として、以下のコードは正しいですか(同じ障壁を再利用していますか?)CのPthreadバリアは再利用可能ですか?

#include <pthread.h> 
pthread_barrier_t barrier; 

void* thread_func (void *not_used) { 
    //some code 
    pthread_barrier_wait(&barrier); 
    //some more code 
    pthread_barrier_wait(&barrier); 
    //even more code 
} 

int main() { 
    pthread_barrier_init (&barrier, NULL, 2); 
    pthread_t tid[2]; 
    pthread_create (&tid[0], NULL, thread_func, NULL); 
    pthread_create (&tid[1], NULL, thread_func, NULL); 
    pthread_join(tid[0], NULL); 
    pthread_join(tid[1], NULL); 
    pthread_barrier_destroy(&barrier); 
} 
+0

'pthread_barrier_init'が返す関数の値は何ですか?そして他の機能は? –

+0

バリアは「フローを制御」しませんが、同期ポイントです。プログラムフローは条件文などによって制御されます。 – Olaf

答えて

6

はい、再利用可能です。 man page says:スレッドの必要数はpthread_barrier_wait(と呼ばれている

)...障壁は、それはそれを参照し、最新 pthread_barrier_init()関数の結果として持っていた状態に リセットしなければなりません。

関連する問題