资源简介
使用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++函数模板使用
相关资源
- 多线程流式套接字C/S模式通信程序
- c语言多线程计算PI
- MFC基于多线程的聊天程序用了winsock套
- Linux下纯C语言 多线程 人机 贪吃蛇
- 简单多线程socket聊天室程序(c语言)
- QT C++ 多线程支持多串口通信
- 给予c++的多线程
- 局域网活动主机扫描程序
- 随机迷宫生成迷宫自动寻路软件VS20
- mfc实现多线程工程代码和线程进程查
- MFC中的多线程同步
- Pthread 多线程C++动态库+静态库+头文件
- 基于Linux C语言的多线程模拟智能家具
- c++多线程的创建挂起执行与销毁
- MFC多线程编程示例47598
- c++11多线程库之线程库使用
- c++11多线程库之互斥库使用
- C C++ Linux多线程文件程序
- 多线程C++爬虫程序
- vc++实现哲学家吃面问题
- 多线程产生Fibonacci序列
- MFC同步线程类
- MFC用户界面线程的创建
- 基于C#写的TCP 客户端多线程处理源码
- HJ212TCPServerC.rar(TCP Socket多线程服务端
- VC环境下高速实时数据采集的实现
- VC++ 多任务多线程程序源码
- C++多线程SOCKET收发
- Linux网络编程
- QT多线程处理图像变换和图像融合
评论
共有 条评论