Win32信号量实现生产者消费者模型
来源:互联网 发布:互联网进入大数据时代 编辑:程序博客网 时间:2024/05/28 23:20
转自:http://blog.csdn.net/webscaler/article/details/6775957
生产者消费者模型简介
1.如果共享的buffer中有空位,则生产者生产产品,放到空位中;
2.如果共享的buffer中有产品,则消费者消费产品;
使用win32简单实现 多生产者/多消费者 模型如下
#include <Windows.h>#include <process.h>#include <iostream>using namespace std;HANDLE hProducter;HANDLE hConsumer;int g_in = 0; // 初始生产产品的放置位置int g_out = 0; // 初始消费产品的读取位置const int MAX_NUM = 100;int g_empty = MAX_NUM; // 初始空位数量int g_full = 0; // 初始产品数量int g_products[MAX_NUM];DWORD WINAPI Productor( LPVOID pParameter){int* pNo = static_cast<int*>(pParameter);while(1){WaitForSingleObject(hProducter, INFINITE);if(g_empty > 0){--g_empty;g_in %= MAX_NUM;g_products[g_in] = g_in;printf("produce id %d pos %d value %d\n", *pNo, g_in, g_products[g_in]);++g_in;++g_full;}ReleaseSemaphore(hProducter, 1, NULL);Sleep(1000);}return 1;}DWORD WINAPI Consumer( LPVOID pParameter){int* pNo = static_cast<int*>(pParameter);while(1){WaitForSingleObject(hConsumer, INFINITE);if(g_full > 0){--g_full;g_out %= MAX_NUM;printf("consume id %d pos %d value %d\n", *pNo, g_out, g_products[g_out]);++g_out;++g_empty;}ReleaseSemaphore(hConsumer, 1, NULL);Sleep(1000);}return 1;}int main(){hProducter = CreateSemaphore(NULL, 1, 1, NULL);hConsumer = CreateSemaphore(NULL, 1, 1, NULL);int ProductorThreadIds[3];int ConsumerThreadIds[3];for(int i = 0; i < 3; ++i){ConsumerThreadIds[i] = i+1;CreateThread(NULL, 0, Consumer, &ConsumerThreadIds[i], NULL, NULL);}for(int i = 0; i < 3; ++i){ProductorThreadIds[i] = i+1;CreateThread(NULL, 0, Productor, &ProductorThreadIds[i], NULL, NULL);}Sleep(10000);return 0;};
- Win32信号量实现生产者消费者模型
- Win32信号量实现生产者消费者模型
- 两个信号量实现生产者消费者模型
- 生产者---消费者模型之信号量
- 信号量综合实例:实现生产者-消费者模型
- 信号量实现环形buff下多生产者多消费者模型
- 信号量实现生产者消费者问题
- 生产者-消费者模型实现
- 信号量(生产者和消费者模型)
- 简单的win32多线程---生产者、消费者模型
- 简单实现生产者、消费者模型
- java实现生产者消费者模型
- 生产者消费者模型的实现
- LinkedBlockingQueue 实现生产者消费者模型
- OpenMP实现生产者消费者模型
- Java实现生产者-消费者模型
- IOS 生产者-消费者模型实现
- Java---实现生产者消费者模型
- 什么样的类需要编写拷贝构造函数
- C++ 智能指针详解
- 基于BindingSource的WinForm开发
- Linux I2C核心、总线与设备驱动
- 尚学堂马士兵_Struts2下载完成
- Win32信号量实现生产者消费者模型
- C++中指针数组与数组指针
- 在Matlab中调用C/C++程序<二>
- Linux进程遍历
- T-SQL查询进阶--深入浅出视图
- 反编译apk文件,得到其源代码的方法
- 论坛数据库的设计
- 地址格式转换,蓝桥第三届决赛第五题
- 一场学习的革命,广州传智播客为什么推出“后付费”