о pthread_barrier_wait - PullRequest
       23

о pthread_barrier_wait

4 голосов
/ 04 июня 2011

Я использую pthread_barrier_wait для синхронизации потоков, но в моей программе существует вероятность истечения срока действия одного или нескольких потоков, в то время как другие ожидают, пока они достигнут pthread_barrier_wait. Есть ли способ, чтобы потоки, застрявшие в pthread_barrier_wait, знали, что срок действия некоторых потоков истек, а все они достигли барьера?

1 Ответ

4 голосов
/ 05 июня 2011

Это во многом зависит от того, как и почему они истекают.

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

if (must_die)
{
    do_barrier_wait();
    pthread_exit(NULL);
}   

Если потоки истекают из-за того, что их убивают или отменяют, тогда жизнь усложняется, и вы, вероятно, направляетесь на территорию монументального хака, и этостоит пересмотреть дизайн.

...