c语言 - 多个线程在没有锁的情况下递增共享变量,但返回"unexpected"输出



我调用了100个线程,每个线程应该增加一个共享变量1000倍。因为我没有使用互斥锁,所以预期的输出不应该是100000。但是,每次我仍然得到100000。

这是我的

volatile unsigned int count = 0;  
void *increment(void *vargp);
int main() {
    fprintf(stdout, "Before: count = %dn", 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 = %dn", count);
    }
    return 0;
}          
void *increment(void *vargp) {
    int c;
    // increment count 1000 times
    for (c = 0; c < 1000; c++) {
        count++;
    }
    return NULL;
}  

pthread_join()函数挂起调用线程的执行,直到目标线程终止(源)。创建每个线程之后,等待它运行并终止。线程永远不会并发执行。因此,没有竞争条件

相关内容

  • 没有找到相关文章

最新更新