首先一個程式(process)在執行時會有一個主執行續(main thread).

然而有些時後需要同時執行兩件事情的時候,則會需要在一隻程式中開啟多個執行續並行處理.

而執行緒的切換是由作業系統負責.

 

以下分別建立烏龜的執行緒以及兔子的執行緒進行賽跑比賽.

首先在c語言中pthread.h的函式庫可以建立與處理執行緒.

 

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

int tortoise_step = 0;
int rabbit_step = 0;
int destination = 10;
int winner = 0;

int r = 0;

void* t_tortoise(void* data){
	while(tortoise_step <  destination && winner == 0){
		sleep(1);
		
		tortoise_step += 1;
		printf("Turtle distance %d steps.\n",destination - tortoise_step);
	}
	
	if(winner == 0){
		winner = 1;
	}
	
	
	pthread_exit(NULL); // thread exit
}

void* t_rabbit(void* data){
	while(rabbit_step <  destination && winner == 0){
		if(r == 0){
			sleep(2);
			printf("Rabbit is sleep.\n");
		}
		else{
			sleep(1);
			rabbit_step += 3;
			printf("Rabbit distance %d steps.\n",destination - rabbit_step);
		}
	}
	
	if(winner == 0){
		winner = 2;
	}
	
	pthread_exit(NULL); // thread exit
}

int main() {
	srand(time(NULL));
	
	
	pthread_t t1; // 宣告 pthread 變數
	pthread_t t2; // 宣告 pthread 變數
	
	pthread_create(&t1, NULL, t_rabbit, "Rabbit"); // 建立子執行緒
	pthread_create(&t2, NULL, t_tortoise, "Tortoise"); // 建立子執行緒
	
	while(winner == 0){
		r = rand()%2;
	}
	
	pthread_join(t1, NULL); // 等待子執行緒執行完成
	pthread_join(t2, NULL); // 等待子執行緒執行完成
	
	switch(winner){
	case 1:
		printf("Tortoise is winner.\n");
		break;
	case 2:
		printf("Rabbit is winner.\n");
		break;
	default:
		printf("no one win the game.\n");
	} 
  
  	return 0;
}

 

實驗成果:

 

 

 

arrow
arrow
    文章標籤
    c thread
    全站熱搜

    Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣()