#include
//定義一些常量;
//本程式允許的最大臨界區數;
#define MAX_BUFFER_NUM 10
//秒到微秒的乘法因子;
#define INTE_PER_SEC 1000
//本程式允許的生產和消費執行緒的總數;
#define MAX_THREAD_NUM 64
//定義一個結構,記錄在測試檔案中指定的每一個執行緒的引數
struct ThreadInfo
{
int serial; //執行緒序列號
char entity; //是P還是C
double delay; //執行緒延遲
int thread_request[MAX_THREAD_NUM]; //執行緒請求佇列
int n_request; //請求個數
};
//全域性變數的定義
//臨界區物件的宣告,用於管理緩衝區的互斥訪問;
CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM];
int Buffer_Critical[MAX_BUFFER_NUM]; //緩衝區宣告,用於存放產品;
HANDLE h_Thread[MAX_THREAD_NUM]; //用於儲存每個執行緒控制代碼的陣列;
ThreadInfo Thread_Info[MAX_THREAD_NUM]; //執行緒資訊陣列;
HANDLE empty_semaphore; //一個訊號量;
HANDLE h_mutex; //一個互斥量;
DWORD n_Thread = 0; //實際的執行緒的數目;
DWORD n_Buffer_or_Critical; //實際的緩衝區或者臨界區的數目;
HANDLE h_Semaphore[MAX_THREAD_NUM]; //生產者允許消費者開始消費的訊號量;
//生產消費及輔助函式的宣告
void Produce(void *p);
void Consume(void *p);
bool IfInOtherRequest(int);
int FindProducePositon();
int FindBufferPosition(int);
int main(void)
//宣告所需變數;
DWORD wait_for_all;
ifstream inFile;
//初始化緩衝區;
for(int i=0;i
Buffer_Critical[i] = -1;
//初始化每個執行緒的請求佇列;
for(int j=0;j
#include
#include
#include
#include
#include
//定義一些常量;
//本程式允許的最大臨界區數;
#define MAX_BUFFER_NUM 10
//秒到微秒的乘法因子;
#define INTE_PER_SEC 1000
//本程式允許的生產和消費執行緒的總數;
#define MAX_THREAD_NUM 64
//定義一個結構,記錄在測試檔案中指定的每一個執行緒的引數
struct ThreadInfo
{
int serial; //執行緒序列號
char entity; //是P還是C
double delay; //執行緒延遲
int thread_request[MAX_THREAD_NUM]; //執行緒請求佇列
int n_request; //請求個數
};
//全域性變數的定義
//臨界區物件的宣告,用於管理緩衝區的互斥訪問;
CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM];
int Buffer_Critical[MAX_BUFFER_NUM]; //緩衝區宣告,用於存放產品;
HANDLE h_Thread[MAX_THREAD_NUM]; //用於儲存每個執行緒控制代碼的陣列;
ThreadInfo Thread_Info[MAX_THREAD_NUM]; //執行緒資訊陣列;
HANDLE empty_semaphore; //一個訊號量;
HANDLE h_mutex; //一個互斥量;
DWORD n_Thread = 0; //實際的執行緒的數目;
DWORD n_Buffer_or_Critical; //實際的緩衝區或者臨界區的數目;
HANDLE h_Semaphore[MAX_THREAD_NUM]; //生產者允許消費者開始消費的訊號量;
//生產消費及輔助函式的宣告
void Produce(void *p);
void Consume(void *p);
bool IfInOtherRequest(int);
int FindProducePositon();
int FindBufferPosition(int);
int main(void)
{
//宣告所需變數;
DWORD wait_for_all;
ifstream inFile;
//初始化緩衝區;
for(int i=0;i
Buffer_Critical[i] = -1;
//初始化每個執行緒的請求佇列;
for(int j=0;j