在操作系统中,优先级调度算法是一种常见的进程调度策略。它根据每个进程的优先级来决定哪个进程先执行:优先级高的进程先运行,优先级低的后运行。本文将带你从零开始,用C++语言实现一个简单的优先级调度算法,即使你是编程小白,也能轻松理解!
优先级调度算法的核心思想是:为每个进程分配一个优先级数值(通常数字越小表示优先级越高,也可以反过来),调度器总是选择当前就绪队列中优先级最高的进程来执行。
我们将使用 C++ 的标准模板库(STL)中的 priority_queue(优先队列)来高效地实现这个算法。优先队列内部通常基于堆(heap)结构,能自动维护元素的顺序。
首先,我们需要定义一个表示“进程”的结构体,包含进程ID、到达时间、执行时间以及优先级。
struct Process { int pid; // 进程ID int arrival_time; // 到达时间 int burst_time; // 执行时间(CPU需要的时间) int priority; // 优先级(数值越小,优先级越高) // 构造函数 Process(int id, int at, int bt, int p) : pid(id), arrival_time(at), burst_time(bt), priority(p) {}}; C++ 的 priority_queue 默认是最大堆,但我们希望优先级高的(即 priority 值小的)排在前面,因此需要自定义比较逻辑。
// 自定义比较器:优先级高的(priority 小)排在前面struct ComparePriority { bool operator()(const Process& a, const Process& b) { return a.priority > b.priority; // 注意:这里用 > 表示小顶堆 }}; 下面是一个简化的非抢占式优先级调度实现(即一旦进程开始执行,就运行到完成)。
#include <iostream>#include <queue>#include <vector>using namespace std;void priorityScheduling(vector<Process>& processes) { // 按到达时间排序(模拟时间推进) sort(processes.begin(), processes.end(), [](const Process& a, const Process& b) { return a.arrival_time < b.arrival_time; }); priority_queue<Process, vector<Process>, ComparePriority> pq; int current_time = 0; int completed = 0; int n = processes.size(); int i = 0; cout << "执行顺序:\n"; while (completed < n) { // 将当前时间已到达的进程加入优先队列 while (i < n && processes[i].arrival_time <= current_time) { pq.push(processes[i]); i++; } if (!pq.empty()) { Process p = pq.top(); pq.pop(); cout << "时间 " << current_time << " - 执行进程 P" << p.pid << "(优先级: " << p.priority << "),耗时 " << p.burst_time << "\n"; current_time += p.burst_time; completed++; } else { // 如果没有就绪进程,时间推进到下一个进程到达 if (i < n) { current_time = processes[i].arrival_time; } } }} int main() { vector<Process> processes = { Process(1, 0, 5, 2), Process(2, 1, 3, 1), Process(3, 2, 8, 4), Process(4, 3, 6, 3) }; priorityScheduling(processes); return 0;} priority_queue 实现高效调度。ComparePriority,可以灵活控制调度顺序。通过本教程,你已经掌握了如何用 C++ 实现基本的优先级调度算法。这不仅是学习C++进程调度的重要一步,也为理解更复杂的调度策略(如多级反馈队列)打下基础。动手试试修改代码,比如支持抢占式调度,或计算平均等待时间,加深理解吧!
SEO关键词提示:本文覆盖了 C++优先级调度算法、操作系统调度、C++进程调度、优先级调度实现 等核心关键词。
本文由主机测评网于2025-12-11发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126192.html