gpt4 book ai didi

c - while循环同步

转载 作者:太空狗 更新时间:2023-10-29 12:31:04 24 4
gpt4 key购买 nike

我正在开发一个用户定义线程数的项目,目前我正在使用 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 循环的迭代次数不同,并且一些线程在退出循环后永远不会到达同步点,您可以使用屏障。检查 here 举个例子。

但是,在退出每个线程后,您需要减少屏障处的线程数。在 count 个线程达到该点后,将在屏障处等待。

因此您需要在每次线程结束时更新屏障对象。并确保以原子方式执行此操作。

关于c - while循环同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com