code:
#include
#include
#include
void gotoxy(int x,int y)
/*四個訊號量,東,西方向訊號量,東,西段互斥訊號量,用訊號量控制過橋的物件,同時過橋的物件僅且
只有兩個,並且不能同向,多個執行緒用同乙個執行緒入口函式*/
handle he_dir; //從西往東訊號量
handle hw_dir; //從西往東訊號量
handle he_mutex; //西段執行緒間的互斥
handle hw_mutex; //東段執行緒互斥
dword winapi etow1_proc(lpvoid lpparameter);//東到西邊執行緒
dword winapi wtoe1_proc(lpvoid lpparameter);//西到東邊執行緒
void bridge(); //建立過橋函式
int i;
int j;
int time1=100,time2=300;
bool e_release;
bool w_release;
int main()
//西到東邊執行緒
dword winapi wtoe1_proc(lpvoid lpparameter)
w_release = releasemutex(he_mutex); //離開西段
if(w_release)/*判斷誰先到,先到等1秒鐘*/ sleep(1000); //到中間區域休息,等待另一方到來
gotoxy(i,12);
printf(" ");
gotoxy(34,11);
printf("☆");
sleep(100);
gotoxy(34,11);
printf("");
gotoxy(35,11);
printf("☆");
sleep(100);
gotoxy(35,11);
printf(" ");
waitforsingleobject(hw_mutex,infinite); //進入東段,互斥
for(i=35;i<=56;i++)
gotoxy(i,12);
printf(" ");
releasemutex(hw_mutex); //解開東段互斥
//releasemutex(he_mutex);
}
// return 0;
}
//東到西邊執行緒
dword winapi etow1_proc(lpvoid lpparameter)
e_release = releasemutex(hw_mutex); //離開東段,
if(e_release) sleep(1000);
gotoxy(j+1,12);
printf(" ");
gotoxy(36,13);
printf("★");
sleep(100);
gotoxy(36,13);
printf("");
gotoxy(35,13);
printf("★");
sleep(100);
gotoxy(35,13);
printf(" ");
gotoxy(34,13);
printf("★");
sleep(100);
gotoxy(34,13);
printf(" ");
waitforsingleobject(he_mutex,infinite);//進入西段,互斥
for(j=32;j>=12;j--)
gotoxy(j+1,12);
printf(" ");
releasemutex(he_mutex);//離開西段段
}
return 0;
}
void bridge()
Java多執行緒題(過橋)
有乙個南北向的橋,只能容納乙個人,現橋的兩邊分別有10人和12人,編制乙個多線程式讓這些人到達對岸,每個人用乙個執行緒表示,橋為共享資源。在過橋的過程中顯示誰在過橋及其走向。package org public class through out bridge 例項化右端12個人,此時所有人都不能過...
多執行緒問題
問題描述 有4個執行緒和1個公共的字元陣列。執行緒1的功能就是向陣列輸出a,執行緒2的功能就是向字元輸出b,執行緒3的功能就是向陣列輸出c,執行緒4的功能就是向陣列輸出d。要求按順序向陣列賦值abcdabcdabcd,abcd的個數由執行緒函式1的引數指定。注 c語言選手可使用windows sdk...
多執行緒問題
程式 是由多個程序組成的。可以理解為靜態的 程序 可以理解為執行中的程式。執行緒 是組成程序的單元,乙個程序中有多個執行緒。我們經常把執行緒看做是程序中的某乙個任務。方式一 繼承乙個thread類 方式二 實現乙個runnable介面 兩種方式相比較,哪個能好點那?一般建議是實現runnable介面...