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

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

C++线程同步之事件(生产者与消费者问题)的更多相关文章

  1. 线程同步介绍及 生产者消费者问题举例 C#版

    现在有五个工人在果园摘水果,一次只能摘一个,摘下的水果放入一个框中,这种框最多只能装50个橘子,一共有两个这样的框.当一个工人装框时,其他工人不能在使用这个框.当两个框都装满了,工人只有等框里有剩余位 ...

  2. 多线程-线程间通信-多生产者多消费者问题(JDK1.5后Lock,Condition解决办法及开发中代码范例)

    1 package multithread4; 2 3 import java.util.concurrent.locks.Condition; 4 import java.util.concurre ...

  3. Python多线程,线程死锁及解决,生产者与消费者问题

    1.Thread类 普通调用 t = Thread(target=test, args=(i,)) # test为目标函数名, 若函数需要参数将其以元组形 # 式赋给args, 若无参数可不写 t.s ...

  4. 同步锁Lock & 生产者和消费者案例

    显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代 ...

  5. 多线程-线程间通信-多生产者多消费者问题解决(notifyAll)

    1 package multithread4; 2 3 /* 4 * 生产者,消费者. 5 * 6 * 多生产者,多消费者的问题. 7 * 8 * if判断标记,只有一次,会导致不该运行的线程运行了. ...

  6. Python并行编程(七):线程同步之事件

    1.基本概念 事件是线程之间用于通讯的对象.有的线程等待信号,有的线程发出信号.基本上事件对象都会维护一个内部变量,可以通过set方法设置为true,也可以通过clear方法设置为false.wait ...

  7. C++线程同步之事件

    题目要求:点击抢红包后,先将第一个编辑框的值设置为1000,然后创建三个线程,让右边的编辑框值依次设置为1000(用事件完成) // MutexExDlg.h : 头文件 // #pragma onc ...

  8. linux系统编程:线程同步-信号量(semaphore)

    线程同步-信号量(semaphore) 生产者与消费者问题再思考 在实际生活中,仅仅要有商品.消费者就能够消费,这没问题. 但生产者的生产并非无限的.比如,仓库是有限的,原材料是有限的,生产指标受消费 ...

  9. python条件变量之生产者与消费者操作实例分析

    python条件变量之生产者与消费者操作实例分析 本文实例讲述了python条件变量之生产者与消费者操作.分享给大家供大家参考,具体如下: 互斥锁是最简单的线程同步机制,面对复杂线程同步问题,Pyth ...

随机推荐

  1. flowable表简要说明

    1. Flowable数据库表命名规则 ACT_RE_* ’RE’表示repository(存储).RepositoryService接口操作的表.带此前缀的表包含的是静态信息,如,流程定义,流程的资 ...

  2. Nginx配置简单基于域名的虚拟主机

    首先修改hosts文件,让浏览器在看到a.com或是www.a.com的网址时知道上哪里去找: # Copyright (c) 1993-2009 Microsoft Corp. # # This i ...

  3. arcgis python脚本工具实例教程—栅格范围提取至多边形要素类

    arcgis python脚本工具实例教程-栅格范围提取至多边形要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:提取栅格数据的范围, ...

  4. 详解intent和intentfilter

    1.Intent对象简介 Intent中文意思指"意图",按照Android的设计理念,Android使用Intent来封装程序的"调用意图",不管启动Acti ...

  5. Centos7搭建FTP服务详细过程

    Centos7搭建FTP服务详细过程https://blog.csdn.net/sinat_30802291/article/details/81706152

  6. [转]vscode 插件推荐 - 献给所有前端工程师(2019.8.7更新)

    原文地址:https://segmentfault.com/a/1190000006697219 VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给 ...

  7. [Bayes] Metropolis-Hastings Algorithm

    [Bayes] prod: M-H: Independence Sampler for Posterior Sampling dchisq gives the density,             ...

  8. python 中requests的返回数可直接使用json

    对Python的request不是很了解,在使用时才发现,可以把request的请求结果,直接使用.json()['字段名']方法进行一个取值,案例如下 def test_tiantian(self) ...

  9. springboot 整合OSS

    OSS 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.OSS可用于图片.音视频.日志等海量文件的存储.各种终端 ...

  10. rpm和deb包制作和升级执行步骤

    deb安装包升级和安装都是dpkg -i .deb命令,升级时直接覆盖安装新包安装步骤:1 preinst install2 postinst configure升级步骤:1 先执行旧包prerm u ...