остановка синхронизации потока posix в том же коде - PullRequest
1 голос
/ 18 октября 2010

У меня есть несколько потоков, и я хочу, чтобы каждый поток ожидал завершения всех остальных в определенный момент в коде, прежде чем продолжить следующим образом:

void *run() { 
  for (i=0;i<1000;i++){
    do_1st();
    // sync() all stop here wait for all then resume
    do_2nd();
  }
}

Я пытался использовать pthread_cond_wait .. но это кажется очень сложным.

Можно ли подождать, чтобы сделать это?

Спасибо

1 Ответ

5 голосов
/ 18 октября 2010

Вы можете использовать pthread_barrier , инициализировать его, прежде чем начинать свои потоки, и установить count в значение no.потоков, которые работают в вашем цикле.например, если у вас 8 потоков:

pthread_barrier_init(&my_barrier,NULL,8);

Цикл потока теперь становится

void *run() { 
  for (i=0;i<1000;i++){
    do_1st();
    pthread_barrier_wait(&my_barrier);
    do_2nd();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...