//○スレッドとシンクロナイズメソッド

//print_関数をmutixで排他処理しています。
//排他処理を行わないとスレッドにより結果がグチャグチャになります。

#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>

//mutexオブジェクトの作成
//PTHREAD_MUTEX_INITIALIZER               時刻情報つき
//PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP  再帰的
//PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP   速い
//PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP エラー検査を行なう
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;

void print_(char*str){
	pthread_mutex_lock(&m);//ロックする

	printf("%s :",str);
	sleep(1);
	printf("%s\n",str);

	pthread_mutex_unlock(&m);//ロックを解除する
}

void *thread(void *arg){
	int i;
	for(i=0;i<10;i++){
		print_(arg);
	}
}

main(){
	int i;
	
	//スレッド1を作成
	pthread_t thread1;
	i=pthread_create(&thread1,NULL,thread,(void *)"Thread1");
	if(i) printf("スレッド1作成失敗\n");
	
	//スレッド2を作成
	pthread_t thread2;
	i=pthread_create(&thread2,NULL,thread,(void *)"Thread2");
	if(i) printf("スレッド2作成失敗\n");

	////スレッドの終了を待機する場合
	pthread_join(thread1,NULL);
	pthread_join(thread2,NULL);
}



▲トップページ > Linux と C