| |
検索
辞書
交通
地図
天気
|
|
マルチスレッドプログラミング
linux gcc でマルチスレッドを使うサンプルプログラムです. mutex で変数の同期を行っています.count1 と count2 の振舞いの違いを見ればどうなっているのか分かると思います. gcc file_name.c -lpthread でコンパイルして下さい. Windows VC++ 版を探している方はこちらへどうぞ.
//マルチスレッドプログラムと mutex の使い方
#include <pthread.h>
#include <stdio.h>
void* thread1(void* pParam); //スレッド1
void* thread2(void* pParam); //スレッド2
int count1=0;
int count2=0;
pthread_mutex_t mutex; //2つのスレッド間で変数の保護を行う
int main(int argc, char *argv[]){
pthread_t tid1, tid2; // スレッド識別変数
pthread_mutex_init(&mutex, NULL);
// スレッドの作成
pthread_create(&tid1, NULL, thread1, NULL);
pthread_create(&tid2, NULL, thread2, NULL);
// スレッド終了待ち
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
//スレッド1
void* thread1(void* pParam)
{
int i;
while(1){
//mutex 間は他のスレッドから変数を変更できない
pthread_mutex_lock(&mutex);
printf("count1:");
for(i=0;i<10;i++){
printf("%d:",count1);
count1++;
}
printf("\n");
sleep(1);
pthread_mutex_unlock(&mutex);
//mutex で変数を保護しないと他のスレッドから変数を変更できる
printf("count2:");
for(i=0;i<10;i++){
printf("%d:",count2);
count2++;
}
printf("\n");
sleep(1);
}
}
//スレッド2
void* thread2(void* pParam)
{
while(1){
//mutex で count1 を保護
pthread_mutex_lock(&mutex);
count1=0;
pthread_mutex_unlock(&mutex);
count2=0;
}
}
|
|
|
|