`
tinggo
  • 浏览: 43761 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Win32多线程学习之二(实现生产者与消费者模型)

阅读更多
#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);
    }
}
分享到:
评论

相关推荐

    Win丨linux丨操作系统实验二:生产者——消费者问题

    1. 在Windows操作系统上,利用Win32 API提供的信号量机制,编写应用程序实现生产者——消费者问题。 2. 在Linux操作系统上,利用Pthread API提供的信号量机制,编写应用程序实现生产者——消费者问题。 3. 两种环境...

    实验一 生产者消费者问题

    C++版,生产者消费者问题利用 多线程来解决,解决消费者与生产者同步、互斥问题,

    windows 程序设计

    Windows 98和Windows NT都是支持32位优先权式多任务(preemptive multitasking)及多线程的图形操作系统。Windows拥有图形使用者接口(GUI ),这种使用者界面也称作「可视化接口」或「图形窗口环境」。有关GUI的概念...

    Python核心编程第二版(ok)

    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 可扩展   ...

    Python核心编程第二版

     1.8 其他实现   1.9 练习   第2章 快速入门   2.1 程序输出,print语句及“Hello World!”   2.2 程序输入和raw_input()内建函数   2.3 注释   2.4 操作符   2.5 变量和赋值   2.6 ...

    C#微软培训资料

    9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 的 声 明 .112 10.2 类 的 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 ...

    Windows驱动开发技术详解的光盘-part1

     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 ...

    windows驱动开发技术详解-part2

     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开发教程.rar

    ANDROID 的推出后可能影响的产业包括移动电信业,软件开发业,手机制造业,在以消费者为核心的状 态 。 对消费者的影响 � 高档手机选择面增加。 � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从...

Global site tag (gtag.js) - Google Analytics