**:
作業系統的乙個經典問題是"生產者-消費者"問題, 這涉及同步訊號量和互斥訊號量的應用, 在這裡,我用執行緒的同步和互斥來實現. /*
* author 張文
* 2008/06/20
*/#include
#include
#include
#include
#include
#define n 2 // 消費者或者生產者的數目
#define m 10 // 緩衝數目
int in = 0; // 生產者放置產品的位置
int out = 0; // 消費者取產品的位置
int buff[m] = ; // 緩衝初始化為0, 開始時沒有產品
sem_t empty_sem; // 同步訊號量, 當滿了時阻止生產者放產品
sem_t full_sem; // 同步訊號量, 當沒產品時阻止消費者消費
pthread_mutex_t mutex;// 互斥訊號量, 一次只有乙個執行緒訪問緩衝
int product_id = 0; //生產者id
int prochase_id = 0; //消費者id
/* 列印緩衝情況 */
void print()
/* 生產者方法 */
void *product()
}/* 消費者方法 */
void *prochase()
}int main()
//初始化互斥訊號量
int ini3 = pthread_mutex_init(&mutex, null);
if(ini3 != 0)
// 建立n個生產者執行緒
for(i = 0; i < n; i++)
}//建立n個消費者執行緒
for(i = 0; i < n; i++)
}//銷毀執行緒
for(i = 0; i < n; i++)
exit(0);
}這個程式容易出錯誤的就是設定同步訊號量和互斥訊號量的順序出錯, 如在生產者或者消費者方法中把互斥訊號量放在同步訊號量的外層. 這樣在內層中某個sem_wait不一定能通過, 從而造成死鎖現象.
生產者 消費者問題實現
include include include include include include define need p 2 生產者程序數 define need c 2 消費者程序數 define works p 10 每個生產者程序執行的次數 define works c 10 每個消費者程序...
生產者消費者問題
public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...
生產者 消費者問題
在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...