Nếu tôi có một pthread_barrier_t được khởi tạo, khi nào thì an toàn để tiêu diệt nó? Ví dụ sau có an toàn không?Khi nào an toàn để phá hủy một rào cản 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);
}
}
Câu cuối cùng của câu trả lời là sai. Mỗi POSIX, đó là UB: "Các kết quả không xác định nếu pthread_barrier_destroy() được gọi khi bất kỳ luồng nào bị chặn trên hàng rào, hoặc nếu hàm này được gọi với một rào chắn chưa được khởi tạo." (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrier_destroy.html) –