生产者和消费者问题
来源:互联网 发布:办公软件2007 编辑:程序博客网 时间:2024/05/20 20:43
#include <stdio.h>
#include <process.h>
#include <windows.h>
int g_Buffer; //缓冲区
HANDLE g_hEventBufferEmpty, g_hEventBufferFull;
//生产者线程函数
unsigned int __stdcall ProducerThreadFun(PVOID pM)
{
for (int i = 1; i <= 100; i++)
{
//等待缓冲区为空
WaitForSingleObject(g_hEventBufferEmpty, INFINITE);
//互斥的访问缓冲区
g_Buffer = i;
printf("生产者将数据%d放入缓冲区\n", i);
//通知缓冲区有新数据了
SetEvent(g_hEventBufferFull);
}
return 0;
}
//消费者线程函数
unsigned int __stdcall ConsumerThreadFun(PVOID pM)
{
for (int i = 1; i <= 100; i++)
{
//等待缓冲区中有数据
WaitForSingleObject(g_hEventBufferFull, INFINITE);
printf(" 消费者从缓冲区中取数据%d\n", g_Buffer);
//通知缓冲区已为空
SetEvent(g_hEventBufferEmpty);
Sleep(10);
}
return 0;
}
int main()
{
//创建二个自动复位事件,一个表示缓冲区是否为空,另一个表示缓冲区是否已经处理
g_hEventBufferEmpty = CreateEvent(NULL, FALSE, TRUE, NULL);
g_hEventBufferFull = CreateEvent(NULL, FALSE, FALSE, NULL);
const int THREADNUM = 2;
HANDLE hThread[THREADNUM];
hThread[0] = (HANDLE)_beginthreadex(NULL, 0, ProducerThreadFun, NULL, 0, NULL);
hThread[1] = (HANDLE)_beginthreadex(NULL, 0, ConsumerThreadFun, NULL, 0, NULL);
WaitForMultipleObjects(THREADNUM, hThread, TRUE, INFINITE);
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
//销毁事件
CloseHandle(g_hEventBufferEmpty);
CloseHandle(g_hEventBufferFull);
return 0;
}
0 0
- 消费者和生产者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 消费者和生产者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- 生产者和消费者问题
- bzoj 3674: 可持久化并查集加强版 可持久化线段树
- The Winter Is Coming
- java封装redis工具类
- linux下实现对framebuffer(/dev/fb0)的截屏操作
- 分享功能
- 生产者和消费者问题
- Ubuntu10.04搭建ltib(MPC8315E)开发环境
- hibernate.cfg.xml配置信息
- C++派生相关
- LR性能测试框架学习总结(二)--controller场景设计
- spring tx:advice事务配置
- js计算用户在页面的停留的时间
- PHP实现随机数和方程求解
- css3中transform中的translate(),scale(),skew(),一个参数时的情况