Wenn ich eine pthread_barrier_t initialisiert habe, wann ist es sicher, sie zu zerstören? Ist das folgende Beispiel sicher?Wann kann eine Pthread-Barriere sicher zerstört werden?
pthread_barrier_t barrier;
...
int rc = pthread_barrier_wait(b);
if (rc != PTHREAD_BARRIER_SERIAL_THREAD && rc != 0){
perror("pthread_barrier_wait");
exit(1);
}
if (id == 0){
if(pthread_barrier_destroy(&(threads[t_root].info.tmp_barrier))){
perror("pthread_barrier_destroy");
exit(1);
}
}
Der letzte Satz Ihrer Antwort ist falsch. Pro POSIX ist es UB: "Die Ergebnisse sind nicht definiert, wenn pthread_barrier_destroy() aufgerufen wird, wenn ein Thread auf der Barriere blockiert ist, oder wenn diese Funktion mit einer nicht initialisierten Barriere aufgerufen wird." (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrier_destroy.html) –