Это во многом зависит от того, как и почему они истекают.
Барьеру не важно, где вызывается pthread_barrier_wait (), поэтому, если это запрограммированное истечение срока действия, просто вызовите wait в этом месте.Счетчик барьеров уменьшается, и когда потоки освобождаются, вы можете выполнить обычную проверку ошибок, а затем сразу же вызвать pthread_exit или что-то еще.Помещение pthread_wait в отдельную функцию может упростить вещи.
if (must_die)
{
do_barrier_wait();
pthread_exit(NULL);
}
Если потоки истекают из-за того, что их убивают или отменяют, тогда жизнь усложняется, и вы, вероятно, направляетесь на территорию монументального хака, и этостоит пересмотреть дизайн.