使用递增的共享变量和条件同步线程的结果

时间:2016-04-08 21:53:35

标签: c multithreading concurrency

标题可能看起来不是特别清楚,但代码解释了自己:

thread_routine

我正在将pthread_create传递给shared_variable(非常标准),但我遇到了结果同步的问题。基本上,问题是第一个线程检查while条件,它通过,然后另一个线程检查它,它也通过。但是,当第一个线程完成并且NUM_OF_THREADS达到5000时,第二个线程尚未完成,它又增加了10个,最终结果变为5010(或// do some work - 1 * 10如果我运行更多最后,虽然整个过程应该在5000结束。

另一个问题是在{{1}}我在屏幕上输出了一些东西,所以循环中的整个内容应该在数据库术语中作为事务工作。我似乎无法弄清楚如何解决这个问题,但我想有一些我很想念的简单。提前谢谢。

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; 
}