2016-03-30 16 views
3

Bu yüzden, dişli bir programın akışını kontrol etmek için C'de engeller oluşturabileceğinizi biliyorum. Bariyeri başlatabilir, iş parçacığınızı kullanabilir ve sonra imha edebilirsiniz. Bununla birlikte, aynı engelin tekrar kullanılıp kullanılamayacağından emin değilim (eğer bir döngüde olsaydı). Yoksa ikinci bir bekleme noktası için yeni bir engel mi kullanmalısınız? Örnek olarak, aşağıdaki kod doğru mu (aynı engeli yeniden kullanıyor)?C Yeniden Kullanılabilir Predread Bariyerler midir?

#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" tarafından döndürülen işlev değeri neydi? Ve diğer işlevler? –

+0

Bir bariyer "akışı kontrol etmez", ancak bir senkronizasyon noktasıdır. Program akışı koşullu ifadeler vb. Tarafından kontrol edilir. – Olaf

cevap

6

Evet, yeniden kullanılabilirler. man page says:

parçacığı gerekli sayıda pthread_barrier_wait çağrıda

() ... bariyer bunu başvurulan En son pthread_barrier_init() fonksiyonunun sonucu vardı durumuna sıfırlama olacaktır.

İlgili konular