#include <windows.h>
#include <stdio.h>HANDLE g_hSet = NULL;
HANDLE g_hClear = NULL;
HANDLE hThread[2] = { NULL };
int g_Max = 10;
int g_Number = 0;// 生产者线程
DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{for (int i = 0; i < g_Max; i++){WaitForSingleObject(g_hSet, INFINITE);g_Number = 1;DWORD id = GetCurrentThreadId();printf("生产者%d将数据%d放入缓冲区!\n", id, g_Number);SetEvent(g_hClear);}return 0;
}// 消费者线程
DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{for (int i = 0; i < g_Max; i++){WaitForSingleObject(g_hClear, INFINITE);g_Number = 0;DWORD id = GetCurrentThreadId();printf("---消费者%d将数据%d放入缓冲区!\n", id, g_Number);SetEvent(g_hSet);}return 0;
}int main()
{g_hSet = ::CreateEvent(NULL, FALSE, TRUE, NULL);g_hClear = ::CreateEvent(NULL, FALSE, FALSE, NULL);hThread[0] = CreateThread(0, 0, ThreadProc1, 0, 0, 0);hThread[1] = CreateThread(0, 0, ThreadProc2, 0, 0, 0);WaitForMultipleObjects(2, hThread, TRUE, -1);CloseHandle(hThread[0]);CloseHandle(hThread[1]);CloseHandle(g_hClear);CloseHandle(g_hSet);getchar();return 0;
}

临界区与互斥体是不能解决线程同步问题的,只能解决互斥问题,但是事件既可以解决互斥问题,又可以解决线程同步问题。

转载于:https://www.cnblogs.com/duxie/p/11123301.html

C++线程同步之事件(生产者与消费者问题)相关推荐

  1. linux使用线程实现生产者消费者问题,Linux平台下线程同步,实现“生产者消费者问题”...

    (1)线程同步,实现"生产者消费者问题" 要求:缓冲区大小为20,生产者每次放一个产品,消费者每次取走一个产品:生产者和消费者至少2个. (2)代码如下: #include #in ...

  2. 多线程-线程间通信-多生产者多消费者示例

    1.多线程-线程间通信-多生产者多消费者问题 多生产者和多消费者.等待唤醒机制. 产生了两个问题: 1.出现了多次连续生产,未消费,或者一个商品被消费多次. 解决:必须要--------每一个被唤醒的 ...

  3. 经典同步问题一——生产者和消费者问题

    系列同步问题: 经典同步问题一--生产者和消费者问题 https://blog.csdn.net/weixin_36465540/article/details/105560002 经典同步问题二-- ...

  4. 线程同步之经典生产者-消费者模型

    /* 线程同步之生产者-消费者模型 该模型符合以下要求: 1.生产者只在仓储未满时生产,仓满则停止生产: 2.消费者只在仓储未空时消费,仓空则等待: 3.当消费者发现仓储为空时则通知生产者生产: 4. ...

  5. java多线程:线程间的通信-生产者和消费者(三)

    在一个程序中,往往会通过多个线程协同来共同完成一项任务,线程间必然需要进行信息的传递,也即是进程间的通信,我们用生产者和消费者的例子来具体分析: 对于生产者和消费者之间的关系,他们都是针对同一资源的操 ...

  6. java基础—线程间的通讯 生产者与消费者

    线程间的的通讯  生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...

  7. RTT的线程同步篇——事件

    野火RTT第21章事件 2018年12月29日 10:47 事件也是线程间通信,仅用于实现线程间同步,而不能传输数据.可以在中断中发送事件. 一对多:一个线程等待多个事件触发:多个事件中的任意一个发生 ...

  8. (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题

    注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 文章目录 一 ...

  9. Java学习(7):同步问题之生产者与消费者的问题

    生产者生产馒头,消费者消费馒头.一个篮子,生产者往篮子中放馒头,消费者从篮子中取馒头. /*** 这是一个篮子类** @author xcx* @time 2017年7月21日上午10:01:32*/ ...

最新文章

  1. 【颠覆认知】为什么YouTube广告只看五秒更赚钱,微博商业产品经理深度剖析。...
  2. Oracle新手笔记(2) 关于Oracle 9i或9i以上版本客户端连接Oracle 8i及8i版本以下服务器端中文字符乱码的解决办法...
  3. golang的一款cms内容管理系统
  4. 彭博社推出“机器学习基础”课程
  5. 去掉838的“消息已发送”的提示
  6. activeMQ 的kahadb存储引擎分析
  7. linux limbo镜像文件下载,limbo linux镜像下载
  8. TCP与UDP的区别
  9. 数据结构 实验4——拓扑排序
  10. 红巨星转场特效预设AE插件 Red Giant Universe 6.0.1 WIN
  11. vue 动态添加组件
  12. 等值线图的Python绘制方法
  13. 拯救老电脑,win10 LTSC版、黑苹果、ubuntu20.04、Android x86等系统安装记录
  14. 携程mysql架构_携程数据库高可用架构实践
  15. 宝德服务器——企业需要真正的按需定制产品
  16. Coding 码市:携手开发者与创业者,重新定义软件外包
  17. Portal官网上的介绍3技术规格
  18. Spring mvc Controller间跳转/重定向/传参
  19. java基础(11)(时间,日期,日历详解以及他们之间的转换)
  20. Unsatisfied dependency expressed through field 'baseMapper'

热门文章

  1. TCP 端口监听队列原理
  2. webpack最简单的入门教程里bundle.js之运行单步调试的原理解析
  3. Flutter 34: 图解自定义 View 之 Canvas (一)
  4. codeforces 1097 Hello 2019
  5. 优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
  6. Uploadify——学习(1):在Struts2的使用
  7. dwz简单配置与操作
  8. could not insert into NHibernate数据库问题解决
  9. MONGODB 集群架构 调整,增加延迟备份节点服务器,删除仲裁节点
  10. RAC+单实例DATAGUARD 配置