标题可能看起来不是特别清楚,但代码解释了自己:
thread_routine
我正在将pthread_create
传递给shared_variable
(非常标准),但我遇到了结果同步的问题。基本上,问题是第一个线程检查while条件,它通过,然后另一个线程检查它,它也通过。但是,当第一个线程完成并且NUM_OF_THREADS
达到5000时,第二个线程尚未完成,它又增加了10个,最终结果变为5010(或// do some work
- 1 * 10如果我运行更多最后,虽然整个过程应该在5000结束。
另一个问题是在{{1}}我在屏幕上输出了一些东西,所以循环中的整个内容应该在数据库术语中作为事务工作。我似乎无法弄清楚如何解决这个问题,但我想有一些我很想念的简单。提前谢谢。
答案 0 :(得分:0)
这个答案可能是也可能不是你所追求的。因为正如评论中所解释的那样,您对程序预期行为的描述是不完整的。没有确切的预期行为,很难给出完整的答案。但是,既然你问,这是一个基于所显示代码的程序的可能结构。它所说明的主要原则是shared_variable
的关键部分必须既简洁又完整。
int shared_variable;
void* thread_routine(void *arg)
{
while (1) {
pthread_mutex_lock(&shared_variable_mutex);
if (shared_variable >= 5000) {
pthread_mutex_unlock(&shared_variable_mutex);
break;
}
shared_variable += 10;
pthread_mutex_unlock(&shared_variable_mutex);
/* Other code that doesn't use shared_variable goes here */
}
return NULL;
}