资源简介
使用c语言写的多线程读写文件的仿真程序,可以模拟多线程中Writer的独占性特性

代码片段和文件信息
/*
开发环境:visual Studio 2015
其他开发环境未经测试
*/
using namespace std;
#include
#include
#include
//***进程结构定义***//
struct process
{
int num;
string ProcessStatus;
int TimeChip;
};
//***队列节点定义***//
typedef struct QNode
{
process data;
struct QNode *next;
}QNode *QueuePrt;
//***队列结构定义***//
typedef struct
{
QueuePrt front rear; // 队头队尾指针
}linkQueue;
//***队列初始化操作***//
void initQuene(linkQueue *q)
{ //初始化队列 为队列分配内存
q->front = q->rear = new QNode;
if (q->front == nullptr)
exit(0);
q->front->next = nullptr;
}
//***入队列操作***//
void enqueue(linkQueue *q process &e)
{//入队列操作
QueuePrt p;
p = new QNode;
if (q == nullptr)
exit(0);
p->data = e;
p->next = nullptr;
q->rear->next = p;
q->rear = p;
}
//***出队列操作***//
void dequeue(linkQueue *q process &e)
{
QueuePrt p;
if (q->front == q->rear)
{//如果队列为空
return;
}
p = q->front->next;
e = p->data;
q->front->next = p->next;
if (q->rear == p) //如果队列为空
q->rear = q->front;
delete p;
}
//***遍历队列中元素并打印***//
void traversalQueue(const linkQueue &q)
{
QueuePrt p;
p = q.front;
while (p != q.rear )
{
p = p->next;
process d = p->data;
cout << “[“< }
cout < }
//***************************************//
int main()
{
linkQueue readyQueue chokeQueue; /*建立就绪队列、阻塞队列*/
initQuene(&readyQueue); /*初始化就绪队列*/
initQuene(&chokeQueue); /*初始化阻塞队列*/
//输入模块*********************************************//
int n; /*表示进程数*/
float Zp; /*表示进入阻塞状态的几率*/
cout <<“请输入并发进程数(10-20):“ < cin >> n;
cout <<“请输入进入阻塞状态概率(0-1):“< cin >> Zp;
//***生成进程并放入就绪队列***//
for (int i = 0; i != n;++i)
{
/*创建进程并初始化进程*/
process p;
p.num = i;
p.ProcessStatus = “ 就绪 “;
cout << “请输入进程 “ << i << “ 的时间片长度(整数) : “;
int l; /*表示进程时间片长度*/
cin >> l;
p.TimeChip = l;
/*将进程加入就绪队列*/
enqueue(&readyQueue p);
}
/*按下 空格 并回车表示过了一个时间片*/
char c; /*表示控制循环的字符*/
process pro; /*表示运行中的程序*/
while (cin.get(c) && (c==‘ ‘||c==10))
{/*进入一次循环 表示时间片变化一次*/
if (pro.ProcessStatus == “ 运行 “)
{/*上一时间片的进程在运行状态时*/
//完成操作当前程序进入就绪队列*****************//
cout << “进程“ << pro.num << “运行结束“ << endl;
if (--pro.TimeChip > 0)
{//若时间片长度大于0,回到就绪队列
pro.ProcessStatus = “就绪“;
enqueue(&readyQueue pro);
cout << “进程“ << pro.num << “回到“ << pro.ProcessStatus << “队列“ << endl;
}
else
cout << “进程“ << pro.num << “时间片长度为0,销毁进程“ << endl;
}
/*取出就绪队列进程到运行状态*/
if (readyQueue.front == readyQueue.rear)
{
cout<<“就绪队列为空,程序结束“< break;
}
dequeue(&readyQueue pro);
pro.ProcessStatus = “ 运行 “;
cout << “时间片+1,进程 “ << pro.num << “ 进入“ << pro.ProcessStatus << “状态“< /*
根据概率进入不同状态
根据输入概率确定本次运行队列行为
*/
srand(time(0));
float b = (rand() % 100) / (float)99; /*产生0-1之间的随机数*/
if (b {/*依据所设置概率进入阻塞状态*/
if (--pro.TimeChip > 0)
{//若进程时间片长度不为0
pro.ProcessStatus = “
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1149 2018-03-25 17:12 ReadMe.txt
文件 58603 2018-03-25 17:15 测试截图.png
目录 0 2019-03-18 21:40 要求\
文件 402227 2018-05-01 12:00 要求\要求.png
文件 4756 2018-03-25 16:59 进程.cpp
- 上一篇:c++写的平衡树数据结构
- 下一篇:c++函数模板使用
相关资源
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 多线程串口通讯
- Win32多线程程序设计--详细书签版
- QT实现视音频实时传输qml+C++
- Linux多线程服务端编程:使用muduo C+
- TCP实现服务器和多客户端通信
- MultiThread(VS2013 MFC多线程-含源码-含个
- C++编写的多线程C/S模式仿QQ软件
- 多线程
- C++ Concurrency in Action 2nd edition235206
- C++多线程网络聊天程序
- MFC中利用多线程实现定时器
- MFC实现多任务多线程软件
- MFC多线程编程三个
- C++ Socket 多线程多机聊天
- posix 多线程程序设计中文版-带书签
- C++11实现多线程电梯运行
- MFC多线程编程
- C++并发编程实战(英文版)
- c++并发编程实战C++11完整pdf中文版
- c++ concurrency in action 2nd edition
- 支持多线程和断点续传的FTP客户端
- Win32多线程程序设计 pdf高清
- 医务室模拟_vc/类/多线程
- C++并发编程实战(中文版)
- VC H264格式视屏播放器源码
- MFC多线程编程----多线程画线源码
- MFC创建多线程工作者线程demo
评论
共有 条评论