Linux C thread-03.重點在於利用全域變數達到thread和主程式資料共用+利用pthread_mutex_t達到thread之間的互鎖功能(實作兩個thread一起處理同一份工作)

Linux C thread-03.重點在於利用全域變數達到thread和主程式資料共用+利用pthread_mutex_t達到thread之間的互鎖功能(實作兩個thread一起處理同一份工作)

Linux C thread-03.重點在於利用全域變數達到thread和主程式資料共用+利用pthread_mutex_t達到thread之間的互鎖功能(實作兩個thread一起處理同一份工作)


code:

/*
thread_example.c :  c multiple thread programming in linux   
*author : falcon   
*E-mail : tunzhj03@st.lzu.edu.cn   
*Web URL : http://zhuwenlong.blog.51cto.com/blog/209020/40339 
*/ 
#include <pthread.h> 
#include <stdio.h> 
#include <sys/time.h> 
#include <string.h> 
#define MAX 10 

pthread_t thread[2]; 
pthread_mutex_t mut; 
int number; 
int i; 
void *thread1() 
{ 
	printf ("thread1 : I'm thread 1\n"); 
	for (i = 0; i < MAX; i++) 
	{ 
		printf("thread1 : number = %d\n",number); 
		pthread_mutex_lock(&mut); 
			number++; 
		pthread_mutex_unlock(&mut);
		sleep(2); 
	}
	printf("thread1 :主函數在等我完成任務嗎?\n");
	pthread_exit(NULL); 
} 

void *thread2()
{ 
	printf("thread2 : I'm thread 2\n"); 
	for (i = 0; i < MAX; i++) 
	{ 
		printf("thread2 : number = %d\n",number);
		pthread_mutex_lock(&mut);
			number++; 
		pthread_mutex_unlock(&mut);
		sleep(3);
	} 
	printf("thread2 :主函數在等我完成任務嗎?\n"); 
	pthread_exit(NULL); 
} 

void thread_create(void) 
{ 
	int temp; 
	memset(&thread, 0, sizeof(thread));
	//comment1 /*創建線程*/ 
	if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2 
	{
		printf("線程1創建失敗!\n");
	}
	else
	{ 
		printf("線程1被創建\n"); 
	}
	if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3 
	{
		printf("線程2創建失敗");
	}
	else
	{ 
		printf("線程2被創建\n");
	}
} 

void thread_wait(void) 
{
	/*等待線程結束*/ 
	if(thread[0] !=0)
	{
		//comment4 
		pthread_join(thread[0],NULL); 
		printf("線程1已經結束\n");
	}
	if(thread[1] !=0) 
	{ 
		//comment5 
		pthread_join(thread[1],NULL);
		printf("線程2已經結束\n");
	}
}

int main() 
{ 
	number=0; 
	/*初始化thread互斥鎖*/ 
	pthread_mutex_init(&mut,NULL); 
	printf("我是主函數哦,我正在創建線程,呵呵\n");
	thread_create(); 
	printf("我是主函數哦,我正在等待線程完成任務,呵呵\n");
	thread_wait();
	return 0; 
} 

 

編譯+執行結果

falcon@falcon:~/program/c/code/ftp$ gcc -lpthread -o thread_example thread_example.c
falcon@falcon:~/program/c/code/ftp$ ./thread_example
我是主函數哦,我正在創建線程,呵呵
線程1被創建
線程2被創建
我是主函數哦,我正在等待線程完成任務阿,呵呵
thread1 : I'm thread 1
thread1 : number = 0
thread2 : I'm thread 2
thread2 : number = 1
thread1 : number = 2
thread2 : number = 3
thread1 : number = 4
thread2 : number = 5
thread1 : number = 6
thread1 : number = 7
thread2 : number = 8
thread1 : number = 9
thread2 : number = 10
thread1 :主函數在等我完成任務嗎?
線程1已經結束
thread2 :主函數在等我完成任務嗎?
線程2已經結束

 

One thought on “Linux C thread-03.重點在於利用全域變數達到thread和主程式資料共用+利用pthread_mutex_t達到thread之間的互鎖功能(實作兩個thread一起處理同一份工作)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *