fcfs,输入进程数量,到达时间,服务时间。用c++
时间: 2024-10-18 12:13:35 浏览: 21
FCFS(First-Come, First-Served,先来先服务)是一种基本的进程调度算法,在C++中可以通过创建一个队列(如`std::queue`)来模拟。每个进程都由其到达时间和服务时间描述。下面是一个简单示例,展示了如何使用C++实现FCFS调度算法:
```cpp
#include <iostream>
#include <queue>
#include <chrono>
// 定义进程类,包含到达时间、服务时间和状态
struct Process {
int arrival_time;
int service_time;
bool is_running;
Process(int arrival, int service) : arrival_time(arrival), service_time(service), is_running(false) {}
};
// FCFS调度器
class FCFS_Scheduler {
private:
std::queue<Process> process_queue;
std::chrono::high_resolution_clock::time_point current_time;
public:
void add_process(Process p) {
process_queue.push(p);
}
void schedule_processes() {
while (!process_queue.empty()) {
auto current_p = process_queue.front(); // 获取队首进程
if (current_time >= current_p.arrival_time) {
// 如果到达时间已经过去,则开始服务该进程
current_p.is_running = true;
std::cout << "Processing " << current_p.arrival_time << ", Service time: " << current_p.service_time << std::endl;
// 更新当前时间并等待服务完成
current_time += std::chrono::seconds(current_p.service_time);
current_p.is_running = false; // 结束服务
process_queue.pop(); // 移除已处理的进程
} else {
// 尚未到到达时间,等待
std::this_thread::sleep_for(std::chrono::seconds(1)); // 暂停1秒(简化版,实际应用可能需要精确计时)
}
}
}
};
int main() {
FCFS_Scheduler scheduler;
// 添加一些进程,例如:
scheduler.add_process(Process(1, 3));
scheduler.add_process(Process(4, 2));
scheduler.add_process(Process(2, 5));
// 启动调度
scheduler.schedule_processes();
return 0;
}
```
在这个例子中,我们首先添加进程到队列,然后在`schedule_processes`函数中按顺序执行它们。每当有一个进程到达其到达时间,就将其放入运行状态,服务完成后移出队列。
阅读全文