資源簡介
解決進程同步中熟睡的理發師問題
包含源代碼與輸出結果
代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?TRUE?1
#define?FALSE?0
//?最大椅子數
#define?MAX_CHAIR?5
//?最大顧客數
#define?MAX_CUSTOMERS?20
//?定義p、v操作
#define?p(x)?sem_wait(&x)
#define?v(x)?sem_post(&x)
//?椅子
int?chair;
//?理發師和顧客信號量
sem_t?baber?customers;
//?互斥信號量?保護臨界區(即椅子)
pthread_mutex_t?chair_mutex;
//?初始化椅子數和信號量
int?init()
{
????chair?=?MAX_CHAIR;
????return?(sem_init(&baber?0?1)?||?sem_init(&customers?0?0));
}
//?理發師線程函數
void*?_baber(void?*arg)
{
????printf(“the?baber?shop?opens...\n\n“);
????while?(TRUE)
????{
????????p(customers);?//?嘗試為一位顧客服務,否則睡覺
????????//?printf(“baber?wake?up...\n“);
????????pthread_mutex_lock(&chair_mutex);
????????++chair;????//?一個顧客去理發,空出一個椅子
????????printf(“the?baber?is?working?on?one...\nso?the?chair?left?:?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2374??2018-05-05?03:54??baber.c
?????文件????????2561??2018-05-05?03:57??baber.txt
- 上一篇:PQFiber-3.0
- 下一篇:保研面試專業課+數理基礎準備一問一答 電子方向
評論
共有 條評論