#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <process.h>
#include <time.h>
#include <list>
#define MUTEX(mutex) WaitForSingleObject(mutex, INFINITE);
#define RELEASE_MUTEX(mutex) ReleaseMutex(mutex);
#define P(sem) WaitForSingleObject(sem, INFINITE);
#define V(sem) ReleaseSemaphore(sem, 1, NULL);
#define CONSUMER_COUNT 10
#define PRODUCER_COUNT 5
HANDLE mutex;
HANDLE emptySem;
HANDLE fullSem;
::std::list<int> gList;
void initialize()
{
mutex = CreateMutex(NULL, false, TEXT("mutex"));
emptySem = CreateSemaphore(NULL, 0, 10, TEXT("empty"));
fullSem = CreateSemaphore(NULL, 10, 10, TEXT("full"));
srand((unsigned int)time(NULL));
}
int main()
{
initialize();
VOID ConsumerThread(VOID* );
VOID ProducerThread(VOID* );
for (int i = 0; i < PRODUCER_COUNT; ++i)
{
_beginthread(ProducerThread, 0, NULL);
}
for (int i = 0; i < CONSUMER_COUNT; ++i)
{
_beginthread(ConsumerThread, 0, NULL);
}
Sleep(3600*1000);
return 0;
}
VOID ConsumerThread(VOID* argu)
{
while(true)
{
P(emptySem);
MUTEX(mutex);
printf("Pop a random number %d\n", *gList.rbegin());
gList.pop_back();
RELEASE_MUTEX(mutex);
V(fullSem);
}
}
VOID ProducerThread(VOID* argu)
{
while(true)
{
P(fullSem);
MUTEX(mutex);
int random = rand();
gList.push_front(random);
printf("Push a random number: %d\n", random);
RELEASE_MUTEX(mutex);
V(emptySem);
}
}
分享到:
相关推荐
1. 在Windows操作系统上,利用Win32 API提供的信号量机制,编写应用程序实现生产者——消费者问题。 2. 在Linux操作系统上,利用Pthread API提供的信号量机制,编写应用程序实现生产者——消费者问题。 3. 两种环境...
C++版,生产者消费者问题利用 多线程来解决,解决消费者与生产者同步、互斥问题,
Windows 98和Windows NT都是支持32位优先权式多任务(preemptive multitasking)及多线程的图形操作系统。Windows拥有图形使用者接口(GUI ),这种使用者界面也称作「可视化接口」或「图形窗口环境」。有关GUI的概念...
Python核心编程第二版(ok) 第1部分 Python核心 第1章 欢迎来到Python世界 1.1 什么是Python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 ...
1.8 其他实现 1.9 练习 第2章 快速入门 2.1 程序输出,print语句及“Hello World!” 2.2 程序输入和raw_input()内建函数 2.3 注释 2.4 操作符 2.5 变量和赋值 2.6 ...
9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 10.2 类 的 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 ...
2.2.2 应用程序与Win32子系统 2.2.3 其他环境子系统 2.2.4 Native API 2.2.5 系统服务 2.2.6 执行程序组件 2.2.7 驱动程序 2.2.8 内核 2.2.9 硬件抽象层 2.2.10 Windows与微内核 2.3 ...
2.2.2 应用程序与Win32子系统 2.2.3 其他环境子系统 2.2.4 Native API 2.2.5 系统服务 2.2.6 执行程序组件 2.2.7 驱动程序 2.2.8 内核 2.2.9 硬件抽象层 2.2.10 Windows与微内核 2.3 ...
ANDROID 的推出后可能影响的产业包括移动电信业,软件开发业,手机制造业,在以消费者为核心的状 态 。 对消费者的影响 � 高档手机选择面增加。 � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从...