算法35(生产者线程和消费者线程)

http://blog.csdn.net/dingguozi/article/details/5965293

/*

生产者消费者线程演示

一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列

*/

#include

#include

#include

#include

#include

using namespace std;

HANDLE ghSemaphore;   //信号量

const int gMax = 100; //生产(消费)总数

std::queue q;   //生产入队,消费出队

//生产者线程

unsigned int __stdcall producerThread(void* pParam)

{

int n = 0;

while(++n

{

//生产

q.push(n);

cout

ReleaseSemaphore(ghSemaphore, 1, NULL); //增加信号量

Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节

}

_endthread(); //生产结束

return 0;

}

//消费者线程

unsigned int __stdcall customerThread(void* pParam)

{

int n = gMax;

while(n--)

{

WaitForSingleObject(ghSemaphore, 10000);

//消费

q.pop();

cout

Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节

}

//消费结束

CloseHandle(ghSemaphore);

cout

_endthread();

return 0;

}

void threadWorking()

{

ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步

cout

unsigned threadID;

HANDLE handles[2];

handles[0] = (HANDLE)_beginthreadex(

NULL,

0,

producerThread,

nullptr,

0,

&threadID);

handles[1] = (HANDLE)_beginthreadex(

NULL,

0,

customerThread,

nullptr,

0,

&threadID);

WaitForMultipleObjects(2, handles, TRUE, INFINITE);

}

int main()

{

threadWorking();

getchar();

return 0;

}

http://blog.csdn.net/dingguozi/article/details/5965293

/*

生产者消费者线程演示

一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列

*/

#include

#include

#include

#include

#include

using namespace std;

HANDLE ghSemaphore;   //信号量

const int gMax = 100; //生产(消费)总数

std::queue q;   //生产入队,消费出队

//生产者线程

unsigned int __stdcall producerThread(void* pParam)

{

int n = 0;

while(++n

{

//生产

q.push(n);

cout

ReleaseSemaphore(ghSemaphore, 1, NULL); //增加信号量

Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节

}

_endthread(); //生产结束

return 0;

}

//消费者线程

unsigned int __stdcall customerThread(void* pParam)

{

int n = gMax;

while(n--)

{

WaitForSingleObject(ghSemaphore, 10000);

//消费

q.pop();

cout

Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节

}

//消费结束

CloseHandle(ghSemaphore);

cout

_endthread();

return 0;

}

void threadWorking()

{

ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步

cout

unsigned threadID;

HANDLE handles[2];

handles[0] = (HANDLE)_beginthreadex(

NULL,

0,

producerThread,

nullptr,

0,

&threadID);

handles[1] = (HANDLE)_beginthreadex(

NULL,

0,

customerThread,

nullptr,

0,

&threadID);

WaitForMultipleObjects(2, handles, TRUE, INFINITE);

}

int main()

{

threadWorking();

getchar();

return 0;

}


相关文章

  • 东南大学操作系统实验报告
  • 操作系统课程设计 操作系统实验 -- 基于WRK 的进程工作集实验 1 掌握虚拟机和调试工具等的使用. 2 阅读Windows 源码中工作集管理相关部分. 3 修改Windows 内核中页面置换算法,深入理解工作集和页面置换算法如何在一个完 ...查看


  • java生产者消费者问题
  • java 生产者消费者问题 引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 存储空间已 ...查看


  • 操作系统第2阶段测试题
  • 考试科目:<操作系统>第5章至第7章(总分100分) 时间:90分钟 一. 名词解释(12分) 1. 2. 3. 系统抖动:导致系统效率急剧下降的主存和辅存之间的频繁页面置换现象称为颠簸,又称为系统抖动. 置换算法:当要索取一页 ...查看


  • 进程同步与互斥
  • 实验二 进程同步与互斥 一. 实验属性 实验性质: 验证性 实验学时: 4学时 实验要求: 必做 二.实验目的 1. 掌握基本的同步与互斥算法,理解生产者消费者模型. 2. 学习使用Linux中基本的同步对象,掌握相关使用方法. 3. 了解 ...查看


  • 互斥量.临界区.信号量.事件标志组和消息邮箱
  • 为了好的理解互斥量.临界区.信号量.事件标志组和消息邮箱,下面一些知识对初学者来说很重要: 为了实现各任务之间的合作和无冲突的运行,在有关联的任务之间必须建立一些制约关系.这些制约关系主要有两种:直接制约关系和间接制约关系. 直接制约关系源 ...查看


  • 合肥工业大学操作系统实验报告
  • 合肥工业大学 计算机与信息学院 实验报告 课 程: 计算机操作系统 专业班级: 计算机科学与技术2班 学 号: 姓 名: 实验1 实验环境的使用 一. 实验目的 1. 熟悉操作系统集成实验环境OS Lab的基本使用方法. 2. 练习编译.调 ...查看


  • 计算机操作系统作业汇总(清华大学出版社)
  • 思考与练习题(第一章) 1. 什么是操作系统?它的主要功能是什么? 答:操作系统是控制和管理计算机的软.硬件资源,合理地组织计算机的工作流程,以方便用户使用的程序集合.其主要功能包括进程管理功能.存储管理功能.设备管理功能和文件管理功能. ...查看


  • 科大讯飞笔试题目--合肥
  • 一.单选题 1.正64边形的外角和是多少(A ) A .1*360 B .1*180 C .64*360 D .64*180 2.有一盆衣服(已经洗过了,需要漂洗),请问在漂洗次数固定的情况下如何分配水才能把衣服洗得最干净(C ) A .从 ...查看


  • 钢板表面缺陷检测系统的设计与实现
  • CN4321258/TP ISSN 10072130X 计算机工程与科学 COMPU TER EN GIN EERIN G &SCIENCE 2009年第31卷第1期 Vol 131,No 11,2009 文章编号:10072130 ...查看


热门内容