#include#include#include#include#include//定义一些常量;//本程序允许的最大临界区数;#defineMAX_BUFFER_NUM10//秒到微秒的乘法因子;#defineINTE_PER_SEC1000//本程序允许的生产和消费线程的总数;#defineMAX_THREAD_NUM64//定义一个结构,记录在测试文件中指定的每一个线程的参数structThreadInfo{intserial;//线程序列号charentity;//是P还是Cdoubledelay;//线程延迟intthread_request[MAX_THREAD_NUM];//线程请求队列intn_request;//请求个数};//全局变量的定义//临界区对象的声明,用于管理缓冲区的互斥访问;CRITICAL_SECTIONPC_Critical[MAX_BUFFER_NUM];intBuffer_Critical[MAX_BUFFER_NUM];//缓冲区声明,用于存放产品;HANDLEh_Thread[MAX_THREAD_NUM];//用于存储每个线程句柄的数组;ThreadInfoThread_Info[MAX_THREAD_NUM];//线程信息数组;HANDLEempty_semaphore;//一个信号量;HANDLEh_mutex;//一个互斥量;DWORDn_Thread=0;//实际的线程的数目;DWORDn_Buffer_or_Critical;//实际的缓冲区或者临界区的数目;HANDLEh_Semaphore[MAX_THREAD_NUM];//生产者允许消费者开始消费的信号量;//生产消费及辅助函数的声明voidProduce(void*p);voidConsume(void*p);boolIfInOtherRequest(int)