操作系统课程设计

发布 2022-10-05 11:31:28 阅读 8752

《操作系统》课程设计。

生产者和消费者问题。

系院:计算机科学与技术学院。

学生姓名:欧阳鹏。

学号: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....