【发布时间】:2019-05-26 02:59:37
【问题描述】:
我有一个代码来模拟串行与并行计算。但是,它似乎有一个竞争条件。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
void *foo(void *para) {
printf("This is Thread %d running...\n", *(size_t *)para);
fflush(stdout);
sleep(2);
}
int main(void)
{
/* loop version
for (size_t i = 0; i < 4; i++) {
foo((void *)&i);
}
*/
pthread_t pool[4];
for (size_t i = 0; i < 4; i++) {
pthread_create(&pool[i], NULL, foo, (void *)&i);
}
for (size_t i = 0; i < 4; i++) {
pthread_join(pool[i], NULL);
}
return 0;
}
输出:
[william@Notebook Downloads]$ time ./a.out
This is Thread 1 running...
This is Thread 2 running...
This is Thread 4 running...
This is Thread 3 running...
real 0m2.003s
user 0m0.003s
sys 0m0.000s
[william@Notebook Downloads]$ time ./a.out
This is Thread 3 running...
This is Thread 3 running...
This is Thread 2 running...
This is Thread 4 running...
real 0m2.003s
user 0m0.003s
sys 0m0.000s
发生竞争条件的大多数示例是当您有多个线程尝试写入共享值时。但是,这段代码中根本没有写操作。那么,为什么会发生这种情况?是不是因为for循环没有按顺序执行?
【问题讨论】:
-
为什么会发生什么?
标签: c pthreads race-condition