トップへ

  検索 辞書 交通 地図 天気

マルチスレッドプログラミング
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;
  }
}

トップへ他のサンプルプログラムへ

月に2回程度の更新を目標としています

Copyright(c) Masaki Onishi All rights reserved.