Si j'ai un pthread_barrier_t initialisé, quand est-il prudent de le détruire? L'exemple suivant est-il sécurisé?Quand est-il prudent de détruire une barrière pthread?
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);
}
}
La dernière phrase de votre réponse est fausse. Pour POSIX, c'est UB: "Les résultats ne sont pas définis si pthread_barrier_destroy() est appelée quand un thread est bloqué sur la barrière, ou si cette fonction est appelée avec une barrière non initialisée." (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrier_destroy.html) –