网
络
操
作
系
统
课
程
设
计
网络操作系统课程设计
设计内容:进程机制与并发程序设计inux下生产者与消费者的问题实现进程机制与并发程序设计inux下生产者与消费者的问题实现
(1)掌握基本的同步互斥算法,理解生产者和消费者同步的问题模型。
(2)了解linux中多线程的并发执行机制,线程间的同步和互斥。
2、实验环境:C/C++语言编译器两类进程 ()和(),分别描述和的行为。PCB* readyhead=NULL, * readytail=NULL; // 就绪队列PCB* consumerhead=NULL, * consumertail=NULL; // 消费者队列PCB* producerhead=NULL, * producertail=NULL; // 生产者队列processproc()--- 给PCB分配内存产生相应的的进程empty()--- 如果缓冲区满,该进程进入生产者等待队列;linkqueue(exe,&producertail); // 把就绪队列里的进程放入生产者队列的尾部Main()---empty---in---full---out---finish
当缓冲池为空时,生产者生产产品in缓冲池 in=in+1
当缓冲池为满时,消费者消费产品out缓冲池 out=out+1
四、PV操作代码
semaphore empty=n;
semaphore full=0;
semaphore mutex=1;
message buffer[n];
int in=0;
int out=0;
void main()
{
parbegin(proceducer(),consumer());
}
void proceducer()
{ do
{ prodece a new meddage;
P(empty);
P(mutex);
send a new message to buffer[in];
in=(in+1)%n;
V(mutex);
V(full);
} while(true);
}
void consumer()
{ do
{ P(full);
P(mutex);
get a message from buffer[out];
out=(out+1)%n;
V(mutex);
V(empty);
comsume a message;
}while(true);
}
五、C++程序代码
#include "windows.h"
#include "iostream.h"
#include "math.h"
#define random (rand()*10000)/RAND_MAX //定义一个随机函数来生产产品,并且使两个顾产品间的时间少于10秒
int long waiting(0); //正在等待的产品的数目
int buffer; //空位的总数目
char empty; //缓冲区空
char full; //缓冲区满
int count(0); //产品的号码数
int finish(0); //生产完毕的产品数目
DWORD a;
void proceduce()
{
Sleep (10000);
cout<
}
void getconsum()
{
Sleep (10001); //产品被生产的函数,为了合理区分生产产品
cout<
}
HANDLE Mutex=CreateMutex(NULL, FALSE, "Mutex"); //用来实现进程的互斥
HANDLE proceducer=CreateSemaphore(NULL, 1,1, "proceducer");//定义信号量来进行线程间的同步
HANDLE consumer=CreateSemaphore(NULL,0,3,"consum");
DWORD WINAPI consum(LPVOID pParm2) //消费的线程
{
WaitForSingleObject(Mutex ,INFINITE); //p(mutex)来进行互斥操作
count++; //生产的是第几个产品
cout<
if (waiting
{
if (waiting!=0)
{
cout<