Я работаю над проектом с определенным пользователем количеством потоков, в котором я использую 7 на данный момент. У меня есть цикл while, который выполняется в каждом потоке, но мне нужны все потоки, чтобы ждать друг друга в конце цикла while. Трудность в том, что некоторые из потоков не все заканчиваются одинаковым количеством раз в цикле.В то время как синхронизация цикла
void *entryFunc(void *param)
{
int *i = (int *)param;
int nextPrime;
int p = latestPrime;
while(latestPrime < testLim)
{
sem_wait(&sem);
nextPrime = findNextPrime(latestPrime);
if(nextPrime != -1)
{
latestPrime = nextPrime;
p = latestPrime;
}
else
{
sem_post(&sem);
break;
}
sem_post(&sem);
if(p < 46341)
{
incrementNotPrimes(p);
}
/*
sem_wait(&sem2);
doneCount++;
sem_post(&sem2);
while(go != 1);
sem_wait(&sem2);
doneCount--;
//sem_post(&sem3);
sem_post(&sem2);
*/
}
return NULL;
}
, где фрагмент кода закомментирован, является частью моей последней попытки решить эту проблему. Именно там все функции должны ждать друг друга. У меня такое чувство, что я пропустил что-то простое.
Вам нужны потоки, чтобы ждать друг друга после каждого завершения цикла while? В этом случае вы можете поставить семафор в ожидании сразу после цикла while. – VAndrei
Используйте вместо барьера вместо семафора. – didierc