首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-09-16 
程序中线程的可并行性判断本人在学习多线程编程,想问一下如何判断一个程序中的线程是否是可并行的?如下是

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


#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个缓冲区问题。
不然,
三个消费者 处理的数据不需要互斥。

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

我的理解如此

热点排行