C++线程同步之事件(生产者与消费者问题)
#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++线程同步之事件(生产者与消费者问题)相关推荐
- linux使用线程实现生产者消费者问题,Linux平台下线程同步,实现“生产者消费者问题”...
(1)线程同步,实现"生产者消费者问题" 要求:缓冲区大小为20,生产者每次放一个产品,消费者每次取走一个产品:生产者和消费者至少2个. (2)代码如下: #include #in ...
- 多线程-线程间通信-多生产者多消费者示例
1.多线程-线程间通信-多生产者多消费者问题 多生产者和多消费者.等待唤醒机制. 产生了两个问题: 1.出现了多次连续生产,未消费,或者一个商品被消费多次. 解决:必须要--------每一个被唤醒的 ...
- 经典同步问题一——生产者和消费者问题
系列同步问题: 经典同步问题一--生产者和消费者问题 https://blog.csdn.net/weixin_36465540/article/details/105560002 经典同步问题二-- ...
- 线程同步之经典生产者-消费者模型
/* 线程同步之生产者-消费者模型 该模型符合以下要求: 1.生产者只在仓储未满时生产,仓满则停止生产: 2.消费者只在仓储未空时消费,仓空则等待: 3.当消费者发现仓储为空时则通知生产者生产: 4. ...
- java多线程:线程间的通信-生产者和消费者(三)
在一个程序中,往往会通过多个线程协同来共同完成一项任务,线程间必然需要进行信息的传递,也即是进程间的通信,我们用生产者和消费者的例子来具体分析: 对于生产者和消费者之间的关系,他们都是针对同一资源的操 ...
- java基础—线程间的通讯 生产者与消费者
线程间的的通讯 生产者与消费者 public class TestDemos3 {public static void main(String[] args){Res r = new Res();I ...
- RTT的线程同步篇——事件
野火RTT第21章事件 2018年12月29日 10:47 事件也是线程间通信,仅用于实现线程间同步,而不能传输数据.可以在中断中发送事件. 一对多:一个线程等待多个事件触发:多个事件中的任意一个发生 ...
- (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题
注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 文章目录 一 ...
- Java学习(7):同步问题之生产者与消费者的问题
生产者生产馒头,消费者消费馒头.一个篮子,生产者往篮子中放馒头,消费者从篮子中取馒头. /*** 这是一个篮子类** @author xcx* @time 2017年7月21日上午10:01:32*/ ...
最新文章
- 【颠覆认知】为什么YouTube广告只看五秒更赚钱,微博商业产品经理深度剖析。...
- Oracle新手笔记(2) 关于Oracle 9i或9i以上版本客户端连接Oracle 8i及8i版本以下服务器端中文字符乱码的解决办法...
- golang的一款cms内容管理系统
- 彭博社推出“机器学习基础”课程
- 去掉838的“消息已发送”的提示
- activeMQ 的kahadb存储引擎分析
- linux limbo镜像文件下载,limbo linux镜像下载
- TCP与UDP的区别
- 数据结构 实验4——拓扑排序
- 红巨星转场特效预设AE插件 Red Giant Universe 6.0.1 WIN
- vue 动态添加组件
- 等值线图的Python绘制方法
- 拯救老电脑,win10 LTSC版、黑苹果、ubuntu20.04、Android x86等系统安装记录
- 携程mysql架构_携程数据库高可用架构实践
- 宝德服务器——企业需要真正的按需定制产品
- Coding 码市:携手开发者与创业者,重新定义软件外包
- Portal官网上的介绍3技术规格
- Spring mvc Controller间跳转/重定向/传参
- java基础(11)(时间,日期,日历详解以及他们之间的转换)
- Unsatisfied dependency expressed through field 'baseMapper'
热门文章
- TCP 端口监听队列原理
- webpack最简单的入门教程里bundle.js之运行单步调试的原理解析
- Flutter 34: 图解自定义 View 之 Canvas (一)
- codeforces 1097 Hello 2019
- 优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
- Uploadify——学习(1):在Struts2的使用
- dwz简单配置与操作
- could not insert into NHibernate数据库问题解决
- MONGODB 集群架构 调整,增加延迟备份节点服务器,删除仲裁节点
- RAC+单实例DATAGUARD 配置