検索 辞書 交通 地図 天気 |
マルチスレッドプログラミング
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; } } |
| ||