多个线程在没有锁的情况下递增共享变量但 return "unexpected" 输出
Multiple threads increment shared variable without locks but return "unexpected" output
我正在调用 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;
}
pthread_join() 函数暂停调用线程的执行,直到目标线程终止 (source)。创建每个线程后,等待它 运行 并终止。线程从不并发执行。因此,没有竞争条件
我正在调用 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;
}
pthread_join() 函数暂停调用线程的执行,直到目标线程终止 (source)。创建每个线程后,等待它 运行 并终止。线程从不并发执行。因此,没有竞争条件