| |
検索
辞書
交通
地図
天気
|
|
マルチスレッドプログラミング
Windows Visual C++ でマルチスレッドを使うサンプルプログラムです. mutex で変数の同期を行っています.count1 と count2 の振舞いの違いを見ればどうなっているのか分かると思います. linux gcc 版を探している方はこちらへどうぞ.
//マルチスレッドプログラムと mutex の使い方
#include <stdio.h>
#include <windows.h>
#include <process.h>
HANDLE hMutex; //ミューテックスのハンドル
int main(void);
int count1 = 0; //mutex で変数を保護する
int count2 = 0; //保護しない
void func1(LPVOID pParam)
{
int i;
while(1){
WaitForSingleObject(hMutex,INFINITE); //mutex 間は他のスレッドから変数を変更できない
printf("count1:");
for(i=0;i<10;i++){
printf("%d:",count1);
count1++;
Sleep(50);
}
printf("\n");
ReleaseMutex(hMutex);
//mutex で変数を保護しないと他のスレッドから変数を変更できる
printf("count2:");
for(i=0;i<10;i++){
printf("%d:",count2);
count2++;
Sleep(50);
}
printf("\n");
}
}
void func2(LPVOID pParam)
{
while(1){
//mutex で count1 を保護
WaitForSingleObject(hMutex,INFINITE);
count1=0;
ReleaseMutex(hMutex);
count2=0;
}
}
int main(void){
HANDLE hThread[2];
hMutex = CreateMutex(NULL,FALSE,NULL); //ミューテックス生成
hThread[0] = (HANDLE)_beginthread(func1,0,NULL); //スレッド1作成
hThread[1] = (HANDLE)_beginthread(func2,0,NULL); //スレッド2作成
//スレッド1、2終了待ち
WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
//ハンドルクローズ
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
CloseHandle(hMutex);
return 0;
}
|
|
|
|