OS 程序同步 生產者消費者

2021-09-24 04:57:46 字數 1603 閱讀 2805

注意:在每個程式中多個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 產品進...