多个线程在没有锁的情况下增加共享变量,但返回"意外"产量

时间:2015-08-22 18:37:56

标签: c multithreading concurrent-programming

我正在调用100个线程,每个线程应该将共享变量增加1000次。由于我不使用互斥锁进行此操作,因此预期输出不应为100000.但是,我每次仍然会获得100000。

这就是我所拥有的

volatile unsigned int count = 0;  
void *increment(void *vargp);

int main() {
    fprintf(stdout, "Before: count = %d\n", count);

    int j;
    // run 10 times to test output
    for (j = 0; j < 10; j++) {
        // reset count every time
        count = 0;

        int i;
        // create 100 theads
        for (i = 0; i < 100; i++) {
            pthread_t thread;

            Pthread_create(&thread, NULL, increment, NULL);
            Pthread_join(thread, NULL);
        }

        fprintf(stdout, "After: count = %d\n", count);
    }

    return 0;
}          

void *increment(void *vargp) {
    int c;

    // increment count 1000 times
    for (c = 0; c < 1000; c++) {
        count++;
    }

    return NULL;
}  

1 个答案:

答案 0 :(得分:3)

pthread_join()函数暂停执行调用线程,直到目标线程终止(source)。创建每个线程后,等待它运行并终止。线程永远不会同时执行。因此,没有竞争条件