操作系统实验题目及实验报告要求 - 图文

发布时间 : 星期二 文章操作系统实验题目及实验报告要求 - 图文更新完毕开始阅读

int main() {

//创建各个互斥信号

g_hMutex = CreateMutex(NULL,FALSE,NULL); g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);

g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL); //调整下面的数值,可以发现,当生产者个数多于消费者个数时, //生产速度快,生产者经常等待消费者;反之,消费者经常等待 const unsigned short PRODUCERS_COUNT = 3; //生产者的个数 const unsigned short CONSUMERS_COUNT = 1; //消费者的个数 //总的线程数

const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; HANDLE hThreads[PRODUCERS_COUNT]; //各线程的handle

DWORD producerID[CONSUMERS_COUNT]; //生产者线程的标识符 DWORD consumerID[THREADS_COUNT]; //消费者线程的标识符 //创建生产者线程

for (int i=0;i

hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]); if (hThreads[i]==NULL) return -1; }

//创建消费者线程

for (int j=0;j

hThreads[PRODUCERS_COUNT+j]=CreateThread(NULL,0,Consumer,NULL,0,&consumerID[j]); if (hThreads[j]==NULL) return -1; }

while (g_continue) {

if (getchar()) { //按回车后终止程序运行 g_continue = false; } } return 0; }

//生产一个产品。简单模拟了一下,仅输出新产品的ID号 void Produce() {

std::cerr << \ std::cerr << \}

//把新生产的产品放入缓冲区 void Append() {

std::cerr << \

g_buffer[in] = ProductID;

in = (in+1)%SIZE_OF_BUFFER; std::cerr << \ //输出缓冲区当前的状态

for (int i=0;i

//从缓冲区中取出一个产品 void Take() {

std::cerr << \ ConsumeID = g_buffer[out];

out = (out+1)%SIZE_OF_BUFFER; std::cerr << \ //输出缓冲区当前的状态

for (int i=0;i

//消耗一个产品 void Consume() {

std::cerr << \ std::cerr << \//生产者

DWORD WINAPI Producer(LPVOID lpPara) {

while (g_continue) {

WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); Produce(); Append(); Sleep(1500);

ReleaseMutex(g_hMutex);

ReleaseSemaphore(g_hEmptySemaphore,1,NULL); }

return 0;

} //消费者

DWORD WINAPI Consumer(LPVOID lpPara) {

while (g_continue) {

WaitForSingleObject(g_hEmptySemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE); Take(); Consume(); Sleep(1500);

ReleaseMutex(g_hMutex);

ReleaseSemaphore(g_hFullSemaphore,1,NULL); }

return 0; }

六、实验体会或对改进实验的建议

1、实验程序复杂,很容易出现错误;

2、在运行的时候,刚开始程序中出现了一个错误,就是重复用了i来定义变量,后来出错,就给变成j;

3、运行结果时,如果没有按回车键,此程序会一直运行下去,类似一个死循环;

七、参考资料

南昌大学实验报告

---(3)编程实现银行家安全算法

学生姓名: 余长华 学号:6100509114 专业班级: 管理科学与工程类093班 实验类型:□ 验证 □ 综合 ■ 设计 □ 创新 实验日期: 实验成绩:

一、实验目的

通过实验加强对银行家安全算法的理解和掌握。

二、实验内容

熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全序列。

三、实验要求

1、需写出设计说明; 2、设计实现代码及说明 3、运行结果;

四、主要实验步骤

#include \ #include \ #include \

#define alloclen sizeof(struct allocation) #define maxlen sizeof(struct max) #define avalen sizeof(struct available) #define needlen sizeof(struct need) #define finilen sizeof(struct finish) #define pathlen sizeof(struct path) struct allocation { int value;

struct allocation *next; }; struct max { int value; struct max *next; };

struct available /*可用资源数*/ {

联系合同范文客服:xxxxx#qq.com(#替换为@)