1 / 9
文档名称:

生产者消费者实验报告.docx

格式:docx   大小:375KB   页数:9页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

生产者消费者实验报告.docx

上传人:清懿 2022/4/2 文件大小:375 KB

下载得到文件列表

生产者消费者实验报告.docx

文档介绍

文档介绍:
实验目的:
利用Windows提供的API函数,编写程序,解决生产者与消费者问题,实现进程的互斥与同步。
实验内容与步骤:
。编写一段程序,模拟生产者和消费者线程,实现进程的互Semaphore
HANDLE m_S_Full; // 消费者Semaphore
HANDLE m_M_Mutex;//互斥信号量
queue<int> food; //定义共享缓冲区
bool producerfinished;//标志着生产者是否结束生产
};
int j=0;//只是为了输出方便观察线程执行次数
int main()
{ /*对各个信号量赋值*/
MyData mydata;//创建一个MyData数据类型的实体mydata
= CreateMutex(NULL, false, NULL);//"false"表示刚刚创建的这个信号量不属于®¨²任何线程
= CreateSemaphore(NULL, N, N, NULL);//初始计数为N
= CreateSemaphore(NULL, 0, N, NULL);//初始计数为0
=false;//生产者结束标志刚开始设置为false,表示没有结束
/*创建生产者和消费者线程*/
HANDLE handles[2];
handles[0] = CreateThread(NULL,0,&Producer,(void*)&mydata,0,0);
handles[1] = CreateThread(NULL,0,&Consumer,(void*)&mydata,0,0);
WaitForMultipleObjects(2, handles, true, INFINITE); //等待两个线程都结束才往下执行
CloseHandle();
CloseHandle();
CloseHandle();
}
/*生产者函数*/
DWORD WINAPI Producer(void* lp)
{
MyData * md = (MyData*)lp;
for(int i =0 ; i < 100; i++){
WaitForSingleObject(md->m_S_Empty, INFINITE);//缓冲区有空间才可以往下
WaitForSingleObject(md->m_M_Mutex, INFINITE);//消费者没有在操作缓冲区生产者才可以执行
/*将所生产的物品放到指定的缓冲区中*/
md->(1);
printf("%d\t生产1个物品,共有%d个物品\t\t%d\n",j++,md->(),GetCurrentThreadId());//输出缓冲区信息以及线程信息
ReleaseMutex(md->m_M_Mutex);//释放互斥信号量
ReleaseSemaphore(md->m_S_Full, 1, NULL);//有物品的缓冲区增加一个
}
md->producerfinished=true;//假设出了for循环,生产者结束生产,控制消费者线程