程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> 用C語言編寫程序:生產者和消費者之間實現同步與互斥問題

用C語言編寫程序:生產者和消費者之間實現同步與互斥問題

編輯:C語言問答

用C語言編寫程序:生產者和消費者之間實現同步與互斥問題

程序盡量設計簡單短小易懂,如有說明更好..希望會的朋友多多幫助.小弟把分全送上...

最佳回答:

//整個程序以偽代碼形式給出,當做一個提示吧,這樣你同學就應該有思路了
//程序中有注釋部分和需要他自己完善的部分,我給的是框架
//老師只是要求用C程序模擬這個機制來實現,就是通過你所學的知識模擬一個效果即可
//利用P,V操作使得在同一時刻,生產者和消費者只能有一個對存儲區操作(即臨界區)。
//如果兩者同時對存儲區操作,即同時取和生產的話,必定會有一個等待,當另一個完成操作後自己才會被喚醒。
//生產者在存儲區滿時不能再生產,進入等待,消費者同理
//完成同步互斥效果
//希望對你朋友有啟發

/*----以下為代碼部分-----*/

//定義全局變量
int empty = 1;//信號量表示存儲單元空,可以生產產品
int full = 0;//信號量表示存儲單元空,不可以消費產品

//P操作
void P(int &mutex)
{
*mutex--;
if(*mutex<0)
{
//當前進程掛起的程序實現
}
}

//V操作
void V(int &mutex)
{
*mutex++;
if(*mutex <=0)
{
//喚醒等待中的進程程序實現
}
}

//生產者程序
void producer()
{
P(& empty);//若此時存儲區空,則可以生產,否則程序掛起等待

//生產一個產品操作

V(&full);//通知消費者進程,可以取產品


}

//消費者程序
void consumer(){
P(&full);//若此時存儲區不空,則可以取產品,否則消費者程序掛起等待

//取走一個產品操作

V(& empty);//通知生產者進程可以生產
}

//主函數
void main()
{
//分別調用生產者,消費者程序,順序不限,因為已經完成信號量的同步,若發生同步問題就會等待

producer();
consumer();
consumer();
producer();

………………

}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved