线程同步之生产者与消费者问题 清疚 2021-12-20 08:39 180阅读 0赞 转载自:[http://blog.csdn.net/morewindows/article/details/7577591][http_blog.csdn.net_morewindows_article_details_7577591] 代码: #include <process.h> #include <Windows.h> #include <iostream> using namespace std; CRITICAL_SECTION g_cs; HANDLE g_hPoolEmpty, g_hPoolFull; int g_nNumProduct;//表示缓存区的产品数量 UINT WINAPI Product(PVOID pNum) { WaitForSingleObject(g_hPoolEmpty, INFINITE); //当获得信号量时,信号量的计数减1,表示有一个线程使用信号量。当有空的时间,就可以生产了 ReleaseSemaphore(g_hPoolFull, 1, NULL); //信号量的计数加1,此时释放是为了让其它线程可以运行 EnterCriticalSection(&g_cs); g_nNumProduct++; cout << "产生1个后的数量为 :" << g_nNumProduct << endl; LeaveCriticalSection(&g_cs); return 0; } UINT WINAPI Customer(PVOID pNum) { WaitForSingleObject(g_hPoolFull, INFINITE);//当有东西的时候,才可以消费,记住当g_hPoolFull为0时,就为不触发状态,就不能获得信号 ReleaseSemaphore(g_hPoolEmpty, 1, NULL); EnterCriticalSection(&g_cs); g_nNumProduct--; cout << "消费1个后的数量为 :" << g_nNumProduct << endl; LeaveCriticalSection(&g_cs); return 0; } void main() { g_hPoolEmpty = CreateSemaphore(NULL, 10, 10, NULL);//表示有10个空的资源等着被使用,触发状态 g_hPoolFull = CreateSemaphore(NULL, 0, 10, NULL);//表示当前有0个资源等着被使用,示触发状态 InitializeCriticalSection(&g_cs); g_nNumProduct = 0; HANDLE hThread[8]; int i; for (i = 0; i < 5; i++) { hThread[i] = (HANDLE)_beginthreadex(NULL, 0, Product, NULL, 0, NULL); } for (i = 5; i < 8; i++) { hThread[i] = (HWND)_beginthreadex(NULL, 0, Customer, NULL, 0, NULL); } WaitForMultipleObjects(8, hThread, TRUE, INFINITE); CloseHandle(g_hPoolEmpty); CloseHandle(g_hPoolFull); DeleteCriticalSection(&g_cs); } 转载于:https://www.cnblogs.com/wang-can/p/3335605.html [http_blog.csdn.net_morewindows_article_details_7577591]: http://blog.csdn.net/morewindows/article/details/7577591
相关 Java线程同步问题:一个生产者消费者案例 在Java中,线程同步是通过各种锁(如synchronized关键字)实现的,以确保同一时间只有一个线程可以执行特定代码块。 下面是一个简单的生产者消费者案例,用到了sync 柔情只为你懂/ 2024年09月12日 21:27/ 0 赞/ 8 阅读
相关 线程通信——多线程同步(生产者消费者例子) 文章目录 前言 一、线程通信概述 二、典型例子 1.生产者和消费者例子 2.通过例子理解与剖析 三、常用API 四 古城微笑少年丶/ 2022年11月02日 00:56/ 0 赞/ 134 阅读
相关 JAVA线程之生产者消费者问题 复习下JAVA线程基础知识: 1、线程的状态: 创建状态:创建了线程对象,此时线程有了相应的内存空间和其他资源,但处于不可运行状态。 就绪状态:线程对象调用start() 我会带着你远行/ 2022年09月26日 00:22/ 0 赞/ 145 阅读
相关 多线程之经典生产者消费者问题 通过信号量,wait,nofity,synchronized来解决生产者消费者问题。 实例如下: package thread; pub 深碍√TFBOYSˉ_/ 2022年08月13日 12:51/ 0 赞/ 163 阅读
相关 多线程之生产者与消费者问题 考虑这样一个饭店,他有一个厨师和一个服务生,然后服务生必须等待厨师准备好食物,当厨师准备好食物时,他会通知服务生,然后服务生上菜, 然后返回继续等待。 / 骑猪看日落/ 2022年06月15日 08:08/ 0 赞/ 181 阅读
相关 线程之间通信之消费者生产者问题 多线程在java开发中是非常重要的一环,因为它充分利用了CPU的特性,尤其现在多核CPU的发展。很多时候能大大的提高性能,像tomcat服务器就利用了多线程,这才有并发 àì夳堔傛蜴生んèń/ 2022年05月30日 02:12/ 0 赞/ 136 阅读
相关 多线程之生产者与消费者 多线程之生产者与消费者 问题描述 程序编写 问题描述 生产者消费者问题是一个非常典型性的线程交互的问题。 1. 使用栈来存放数据 比眉伴天荒/ 2022年04月25日 05:00/ 0 赞/ 192 阅读
相关 线程同步之生产者与消费者问题 转载自:[http://blog.csdn.net/morewindows/article/details/7577591][http_blog.csdn.net_morewi 清疚/ 2021年12月20日 08:39/ 0 赞/ 181 阅读
相关 多线程_生产者消费者问题 什么是多线程的生产者-消费者问题 当一个或者多个线程只负责往"数据缓冲区"中添加数据,而一个或者多个线程只负责从"数据缓冲区"中 取数据时可能造成的存数据时数据缓冲区满, 客官°小女子只卖身不卖艺/ 2021年07月24日 22:47/ 0 赞/ 429 阅读
还没有评论,来说两句吧...