读书人

程序中线程的可并行性判断,该怎么解决

发布时间: 2012-09-16 17:33:16 作者: rapoo

程序中线程的可并行性判断
本人在学习多线程编程,想问一下如何判断一个程序中的线程是否是可并行的?如下是我写的一个简易的加法程序:请诸位多多指教。谢谢了。


#include <windows.h>
#include<time.h>
#include <iostream>
using namespace std;

int a[1003];
DWORD WINAPI MyThread1(PVOID pvParam)
{
int i,j=0;
srand(time(0));
for(;j<1000;j++)
{
int t=rand()%10;
a[j]=t;
cout<<a[j]<<" ";
}
//生成1-10之间的随机数
return 0;
}

DWORD WINAPI SumThread1(PVOID pvParam)
{
int sum=0;
for(int i=0;i<350;i++)
{
sum+=a[i];
}
a[1001]=sum;
return 0;
}

DWORD WINAPI SumThread2(PVOID pvParam)
{
int sum=0;
for(int i=350;i<700;i++)
{
sum+=a[i];
}
a[1002]=sum;
Sleep(1000);
return 0;
}


DWORD WINAPI SumThread3(PVOID pvParam)
{
int sum=0;
for(int i=700;i<1000;i++)
{
sum+=a[i];
}
a[1003]=sum;
Sleep(1000);
return 0;
}
int main()
{
cout<<"随机数序列为:"<<endl;
HANDLE hThread1 = CreateThread(NULL, 0, MyThread1, NULL, 0, NULL);
Sleep(1500);
HANDLE hThread2 = CreateThread(NULL, 0, SumThread1, NULL, 0, NULL);
HANDLE hThread3 = CreateThread(NULL, 0, SumThread2, NULL, 0, NULL);
HANDLE hThread4 = CreateThread(NULL, 0, SumThread3, NULL, 0, NULL);
Sleep(1000);
int sum;
sum=a[1001]+a[1002]+a[1003];
cout<<"Then,The total sum will gona be:"<<sum<<endl;
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hThread3);
return 0;
}




[解决办法]
1. 多个线程考虑会不会同时访问某些相同的数据,这样数据能不能同时访问.(访问包括: 修改 和读取)
2. 多个线程之间有没有相互协作关系,比如线程1要等线程2完成某项工作才能继续做某些事
3. 其它. 后面的补充
[解决办法]
原以为是 1个生产者,3个消费者,1000个缓冲区问题。
不然,
三个消费者 处理的数据不需要互斥。

这里需要 生产者 和消费者需要同步
第二个就是 消费者完后,才计算,需要同步,

我的理解如此

读书人网 >C++

热点推荐