资源简介
通过3个进程,3个缓冲队列,模拟缓冲池输入、计算、输出的过程。
代码片段和文件信息
#include
#include
#include
#include
#include
DWORD WINAPI Thread1(LPVOID lpPara); //线程1
DWORD WINAPI Thread2(LPVOID lpPara); //线程2
DWORD WINAPI Thread3(LPVOID lpPara); //线程1
HANDLE MS[3]; //互斥信号
HANDLE RS[3]; //同步信号
struct Buffer
{
int BufNo; //缓冲区号
int buf; //缓冲区内容
Buffer *next; //下一个缓冲区的指针
};
class BufferQueue //缓冲队列类
{
public:
BufferQueue();
~BufferQueue();
bool isEmpty();
void enqueue(int nint x=-1); //入队
Buffer *dequeue(); //出队
private:
Buffer *front*rear;
};
BufferQueue::BufferQueue() //构造
{
front=rear=NULL;
}
BufferQueue::~BufferQueue() //析构
{
Buffer *q=front*p;
while(q!=NULL)
{
p=q;
q=q->next;
delete p;
}
front=rear=NULL;
}
bool BufferQueue::isEmpty() //判断是否空队列
{
return front==NULL&&rear==NULL;
}
void BufferQueue::enqueue(int nint x) //入队
{
Buffer *q=new Buffer;
if(x!=-1) //插入非空缓冲区
q->buf=x;
q->BufNo=n; //缓冲区序号
if(isEmpty()) //空队列插入
front=q;
else
rear->next=q; //列尾插入
rear=q;
}
Buffer *BufferQueue::dequeue() //出队
{
Buffer *q=front;
front=front->next;
if(front==NULL) //空队列时,首尾同步
rear=NULL;
return q;
}
BufferQueue empinqoutq; //3个缓冲队列
Buffer* takeBuf(int type); //从type类型缓冲队列头取出一个缓冲区
void addBuf(int typeBuffer* buffer); //将buffer插入type类型队列尾
Buffer* getBuf(int type); //包含了同步和互斥控制的takeBuf操作
void putBuf(int type Buffer* buffer); //包含了同步和互斥控制的addBuf操作
enum type{emptyinputoutput}; //类型
int main()
{
DWORD ThreadId1 ThreadId2ThreadId3;
for(int a=0;a<20;a++) //假设20个缓冲区
emp.enqueue(a);
for(int a=0;a<3;a++) //3个互斥信号
MS[a]=CreateMutex(NULLFALSE“qemtx“);
RS[0]=CreateSemaphore(NULL2020 “esp“); //3个同步信号
RS[1]=RS[2]=CreateSemaphore(NULL020 “iosp“);
HANDLE ithread = CreateThread(NULL0Thread1NULL0&ThreadId1);
HANDLE cthread = CreateThread(NULL0Thread2NULL0&ThreadId1);
HANDLE othread =
- 上一篇:c语言编写的超级玛丽
- 下一篇:c++ 连接sql server 数据库代码
相关资源
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 文件传输和聊天程序(c语言实现)
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
评论
共有 条评论