第19講 gcnew Threadによるマルチスレッドプログラミング
第5話 素数探索マルチスレッド解答例
コード例
#include<iostream>
#include<math.h>
using namespace std;
using namespace System;
using namespace System::Threading;
const int N=10000000;
int cn1,cn2,cn3,cn4;
void f1();
void f2();
void f3();
void f4();
char h(int a);
int main(){
DateTime^ hj=DateTime::Now;
cn1=1;
Thread^ a=gcnew Thread(gcnew ThreadStart(f1));
Thread^ b=gcnew Thread(gcnew ThreadStart(f2));
Thread^ c=gcnew Thread(gcnew ThreadStart(f3));
Thread^ d=gcnew Thread(gcnew ThreadStart(f4));
a->Start();
b->Start();
c->Start();
d->Start();
a->Join();
b->Join();
c->Join();
d->Join();
DateTime^ ow=DateTime::Now;
TimeSpan sa=ow->Subtract(*hj);
cout<<"素数の総数は"<<cn1+cn2+cn3+cn4<<"です。"<<endl;
cout<<"計算時間は"<<sa.TotalSeconds<<"秒です。"<<endl;
}
void f1(){
int i;
//cout<<"2"<<" ";
for(i=3;i<=N;i+=8){
if(h(i)){
//cout<<i<<" ";
cn1++;
}
}
//cout<<endl;
}
void f2(){
int i;
//cout<<"2"<<" ";
for(i=5;i<=N;i+=8){
if(h(i)){
//cout<<i<<" ";
cn2++;
}
}
//cout<<endl;
}
void f3(){
int i;
//cout<<"2"<<" ";
for(i=7;i<=N;i+=8){
if(h(i)){
//cout<<i<<" ";
cn3++;
}
}
//cout<<endl;
}
void f4(){
int i;
//cout<<"2"<<" ";
for(i=9;i<=N;i+=8){
if(h(i)){
//cout<<i<<" ";
cn4++;
}
}
//cout<<endl;
}
char h(int a){
int i;
for(i=3;i<=(int)sqrt((double)a);i+=2){
if(a%i==0)return(0);
}
return(1);
}
シングルスレッド版
に比べると12/28です。
2倍以上速くなりました。
それでは皆さん、第2話の出来の悪かった普遍版魔方陣自動生成マルチスレッド版を.NETによって改良しましょう。
第4話へ 第6話へ
C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)