注意:在每個程式中多個wait操作順序不可以顛倒。應先執行對資源訊號量的wait操作,然後再執行對互斥訊號量的wait操作,否則可能引起程序死鎖。
概述:p操作:同步再前, 互斥再後
//記錄型訊號量
#include
using
namespace std;
int in=0;
//佇列的隊首
int out=0;
//佇列的隊尾
int buff[n]
;//緩衝區
bool mutex=1;
//緩衝區是否可用
int empty=n;
//空緩衝區的個數
int full=0;
//有資料的緩衝區的個數
void
producer()
while
(true)}
void
consumer()
while
(true);
}int
main()
//add訊號量:
#include
using
namespace std;
int in=0;
//佇列的隊首
int out=0;
//佇列的隊尾
int buff[n]
;//緩衝區
bool mutex=1;
//緩衝區是否可用
int empty=n;
//空緩衝區的個數
int full=0;
//有資料的緩衝區的個數
void
producer()
while
(true)}
void
consumer()
while
(true);
}int
main()
//管程
#include
using
namespace std;
class
producerconsumer
void
put(
int x)
buff[in]
=x; in=
(in+1)
%n; count++
;//產品數++
notempty.
pop();
//喚醒等待佇列的消費者
}void
get(
int&x)
x=buff[out]
; out=
(out+1)
%n;
count--
;
notfull.
pop(
)喚醒等待佇列的生產者
}}pc;
void
producer()
}void
consumer()
}int
main()
C 模擬「生產者消費者」程序同步問題
include include include include include using namespace std const int limit 30 生產總量 const int maxsize 10 緩衝區大小 const int kind 7 int bufidx 0 當前緩衝區下標 s...
Linux下程序同步問題 生產者消費者
設計思路,首先有緩衝區內資源,生產者消費者都用,而且是資源訊號量,那麼需要建立兩個訊號量,乙個代表空閒的個數,乙個代表非空閒個數。同時緩衝區的使用是互斥的,所以需要建立乙個互斥訊號量。include include include include include include include in...
程序同步的經典演算法 生產者和消費者
include include const unsigned short size of buffer 2 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0 將被消耗的產品號 unsigned short in 0 產品進...