После возврата pthread_barrier_wait()
все потоки попадут в барьер и продолжат работу. Так как возвращаемое значение PTHREAD_BARRIER_SERIAL_THREAD
задано только одному потоку, его можно использовать для условного переноса кода уничтожения следующим образом:
int rc = pthread_barrier_wait(&b)
if ( rc == PTHREAD_BARRIER_SERIAL_THREAD )
{
pthread_barrier_destroy(&b);
}
Также помните, что pthread_barrier_destroy()
вернет результат EBUSY
, если барьер использовался (то есть другой поток вызвал pthread_barrier_wait()
).