Win32信号量实现生产者消费者模型
2011-09-14 21:05
381 查看
生产者消费者模型简介
1.如果共享的buffer中有空位,则生产者生产产品,放到空位中;
2.如果共享的buffer中有产品,则消费者消费产品;
使用win32简单实现 多生产者/多消费者 模型如下
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信号量实现生产者消费者模型
- linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段
- 利用多线程和信号量,互斥量实现的经典的生产者与消费者模型
- 【Windows】用信号量实现生产者-消费者模型
- 信号量实现环形buff下多生产者多消费者模型
- linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段
- linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段 .
- linux网络编程之System V 信号量(三):基于生产者-消费者模型实现先进先出的共享内存段
- 信号量实现环形buff下多生产者多消费者模型
- 两个信号量实现生产者消费者模型
- 【Linux】线程总结:线程同步 -互斥锁,条件变量,信号量实现多生产者多消费者模型
- 经典的生产者与消费者模型(基于BlockingQueue队列实现)
- 线程同步:条件变量实现生产者消费者模型
- 生产者消费者模型(Linux系统下的两种实现方法)
- 小白学linux之生产者与消费者模型实现
- TransferQueue实现生产者、消费者模型
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5之前实现版
- python3用消费者和生产者模型,实现视频流读取播放
- 利用两个线程实现生产者消费者模型
- C++实现简单生产者消费者模型