#include <windows.h>
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度
unsigned short ProductID = 0; //产品号
unsigned short ConsumeID = 0; //将被消耗的产品号
unsigned short in = 0; //产品进缓冲区时的下标
unsigned short out = 0; //产品出缓冲区时的下标
int g_buffer[SIZE_OF_BUFFER]; //缓冲区是个循环队列
bool g_continue = true; //控制程序结束
HANDLE g_hMutex; //用于线程间的互斥
HANDLE g_hFullItems; //缓冲区中被占用的项
HANDLE g_hEmptyItems; //缓冲区中的空项
DWORD WINAPI Producer(LPVOID); //生产者线程,dword 变量类型的内存占位
DWORD WINAPI Consumer(LPVOID); //消费者线程
int main()
{
//创建各个互斥信号
g_hMutex = CreateMutex(NULL, FALSE, NULL);
g_hFullItems = CreateSemaphore(NULL, 0, SIZE_OF_BUFFER, NULL);//创建信号灯,createsemaphore常常被用作多线程同步
相关推荐
115_多线程_任务:生产者、消费者,仓库一次只能进入一人,最多存放10个产品;仓库空,消费者不能再拿产品,仓库满生产者不能在生产【采用信号、互斥锁完成,注意信号不为0就会一直执行,解锁不加延时】
动图: 预解: 生产者抢到信号,num初始值3 生产者的信号数量是 7 ,代表他可以循环 7 次, 直到sem_wait -- 到0,才会阻塞 但是呢, 在一个人运行的时候, 另一个人必须停在那里,等到这个人运行结束 所以 需要互斥锁!! 在【生产者】运行时, sem1--, sem++ 7 次后, sem1==0, 停止, 开始轮到阻塞在外面的 【消费者】sem通过 于是【生产者】解锁 !! 这里【生产者】不会再次抢到锁,因为他的信号已经是 0 了,会阻塞在外面 此时仓库有 10 个 产品, 所以
【生产者-消费者问题】Windows线程的互斥与同步
【生产者-消费者问题】Windows线程的互斥与同步(操作系统课设作业)
生产者消费者问题C/C++源程序
程序是在vc++2005上运行通过的,在vc6上运行有问题,不过只需要修改输出部分,应该还是可以的。 此外,在vc2005上运行时,由于WaitForMultiObjects函数只能等待64个线程,因此,只要生产者和消费者总数不超过64个就没问题,实际上,即使超过64个线程,通过修改WaitForMultiObjects函数等待对象个数为64,也是可以运行的。我测试了很多次,包括极端的情况(比如1000个生产者1个消费者或者相反的情形),没有问题。 如果需要帮助,可以和我联系。 操作系统中典型的同步问题,m个生产者,n个消费者链接在具有k个单位缓冲区的有界环形缓冲区上,生产者和消费者是并发线程,只要缓冲区未满,生产者线程就可以生产一件产品放入其中,只要缓冲区不空,消费者就可以从中取出一件产品消费。
生产者消费者完整代码
#include #include const unsigned short SIZE_OF_BUFFER = 10; unsigned short ProductID = 0; unsigned short ConsumeID = 0; unsigned short in = 0; unsigned short out = 0; int g_buffer[SIZE_OF_BUFFER];
操作系统-消费者生产者代码C++Windows实现
在VC++ 6.0上创建工程以及如何实现代码运行 生产者消费者代码 错误修正 error C2374: ‘i’ : redefinition; multiple initialization错误提示 ——解决方法
模拟生产者-消费者问题和读者-写者问题
一组生产者进程生产产品给一组消费者进程消费。一个有n个缓冲区的缓冲池,生产者一次向一个缓冲区中投入消息,消费者从一个缓冲区中取得。生产者——消费者问题实际上是相互合作进程关系的一种抽象。该类问题不允许消费者进程到一个空缓冲区中取产品,同时也不允许生产者进程到一个已满且还没被取走的缓冲区中投放产品。 使用一个数组来表示具有n个(0,1,…,n-1)缓冲区的缓冲池。用输入指针in来指示下一个可投放产品的缓冲区,每当生产者进程生产并投放一个产品后,in加1;用一个输出指针out来指示下一个可从中获取产品的缓冲区,
操作系统实验三——生产者消费者(C++实现)
介绍 按下空格暂停。 C++代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <windows.h> #include <conio.h> #include <queue> #define PDC 0 //生产者 #define CSM 1 //消费者 using namespace std
Juc02_Synchronized、ReentrantLock实现生产者和消费者问题
4456
C++(7)——设计模式 消费者-生产者
C++(7)——设计模式 消费者-生产者
生产者消费者问题之单生产者-多消费者模型
与单生产者和单消费者模型不同的是,单生产者-多消费者模型中可以允许多个消费者同时从产品库中取走产品。所以除了保护产品库在多个读写线程下互斥之外,还需要维护消费者取走产品的计数器,代码如下: #include <unistd.h> #include <cstdlib> #include <condition_variable> #include <iostream> #include <mutex>
C++设计模式八、生产者消费者模式(单生产多消费)。
前言:上篇博文(点击这里)介绍了生产者消费者模式中的单生产单消费模式,本篇博文介绍单生产多消费者模式,下面还会介绍多生产单消费模式、多生产多消费模式。代码类似,所以类似的博客只介绍差异性,本篇纯属小白教学,如有不对,还望指正。如有疑问,可交流学习。博主邮箱:yanzt08@163.com #include <cstdlib> #include <condition_varia...
多生产者-多消费者模型
#include <unistd.h> #include <cstdlib> #include <condition_variable> #include <iostream> #include <mutex> #include <thread> static const int kItemR...
浅学C++(7)网络编程(生产者消费者模型 网络聊天室的实现)
网络聊天室小项目的实现
单生产者-多消费者模型
#include <unistd.h> #include <cstdlib> #include <condition_variable> #include <iostream> #include <mutex> #include <thread> static const int kItemR...
施磊老师高级c++(四)
c++多线程, 互斥锁, 条件变量,无锁操作
四、操作系统——读者写者问题(详解)
一、问题描述: 二、需要满足的条件: 写进程与写进程之间必须互斥的写入数据(因为如果两个写进程同时对共享数据中的区域A中的数据进行写操作的话,会导致数据错误覆盖的问题) 写进程与读进程之间必须互斥的访问共享数据(因为写进程与读进程如果同时访问共享数据,可能会导致数据不一致的问题。比如:读进程A想要访问共享数据中的B数据,但是写进程C在读进程A访问B数据之前将B数据进行了更新,这就会导致读进程A读不到它想要读到的数据,从而出现数据不一致问题) 读进程与读进程之间可以同时访问数据,不需要实现互斥的访问共享数
[线程/C/C++(11)]线程池
C/C++(11)手写线程池
257


&spm=1001.2101.3001.11974&articleId=78246894&d=1&t=3&u=af824cb87ec144a6bc4d3d68af73cf6c)

被折叠的 条评论
为什么被折叠?



