《操作系统》课程设计。
生产者和消费者问题。
系院:计算机科学与技术学院。
学生姓名:欧阳鹏。
学号:2008082287
专业:计算机科学与技术。
完成日期:2024年12月。
指导教师:高新奇。
附:课程设计源**:
#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];
intbuffer_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< max_buffer_num;i++)
buffer_critical[i] =1
//初始化每个线程的请求队列;
for(int j=0;j for(int k=0;kthread_info[j].thread_request[k] =1;
thread_info[j].n_request = 0;
//初始化临界区;
for(i =0;i< max_buffer_num;i++)
initializecriticalsection(&pc_critical[i]);
//打开输入文件,按照规定的格式提取线程等信息;
//从文件中获得实际的缓冲区的数目;
infile >>n_buffer_or_critical;
printf("输入文件是:");
//回显获得的缓冲区的数目信息;
printf("%d ",(int) n_buffer_or_critical);
//提取每个线程的信息到相应数据结构中;
while(infile)
n_thread++;
//回显获得的线程信息,便于确认正确性;
for(j=0;j<(int) n_thread;j++)
printf("");
//创建在模拟过程中几个必要的信号量。
empty_semaphore=createsemaphore(null,n_buffer_or_critical,n_buffer_or_critical,semaphore_for_empty");
h_mutex = createmutex(null,false,"mutex_for_update");
//下面这个循环用线程的id号来为相应生产线程的产品读写时所。
//使用的同步信号量命名;
for(j=0;j<(int)n_thread;j
std::string lp ="semaphore_for_produce_";
int temp =j;
while(temp)
h_semaphore[j+1]=createsemaphore(null,0,n_thread,}
//创建生产者和消费者线程;
for(i =0;i< (int) n_thread;i++)
//主程序等待各个线程的动作结束;
wait_for_all = waitformultipleobjects(n_thread,h_thread,true,-1);
printf(" n all producer and consumer h**e finished their work. ");
getch();
return 0;
/确认是否还有对同一产品的消费请求未执行;
bool ifinotherrequest(int req)
for(int i=0;i for(int j=0;jif(thread_info[i].thread_request[j] =req)
操作系统课程设计
课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...
操作系统课程设计
银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...
操作系统课程设计
学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....