在学习pthread多线程的过程中遇到了让我头疼不已的问题。
#include <iostream> #include <pthread.h> #include <stdio.h> int n = 10000000; int t = 4; int l = n/t; double sum[4]={0,0,0,0}; void* pi_thread(void* i) { int k = *(int *)i; for(int j=k*l;j<k*l+l;j++){ double o = (j+0.5)/n; sum[k] += 4.0/(1.0+o*o); } sum[k] /= n; printf("Thread %d returns value %f\n",k,sum[k]); return NULL; } int main() { int i; double ans = 0; pthread_t tid[10]; int id[10]; for(i=0;i<t;i++){ id[i] = i; pthread_create(&tid[i], NULL, pi_thread, &id[i]); } for(i=0;i<t;i++){ pthread_join(tid[i],NULL); ans += sum[i]; } printf("%f\n",ans); return 0; }
一个多线程求pi的程序,本来很简单,但是输出结果却是这样的:

我找了很久的原因,发现去掉#include <iostream>,就变正常了。

但是还是不明白其中的道理。
希望有大牛看到能帮我解答一下。
博主在使用pthread多线程实现π的数值计算时遇到诡异的结果,移除<iostream>后问题解决,寻求背后原理。涉及多线程、数学计算及C++标准库交互问题。
3826

被折叠的 条评论
为什么被折叠?



