首先一個程式(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;
}
實驗成果:
文章標籤
全站熱搜