短作业优先调度算法代码 c语言
时间: 2024-11-11 16:05:30 浏览: 33
短作业优先(Shortest Job First,SJF)是一种常见的作业调度算法,它优先处理完成时间最短的任务。在C语言中实现这个算法,你可以按照以下步骤:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 结构体表示任务,包含id、运行时间和优先级
typedef struct {
int id;
int burst_time; // 运行时间
int priority; // 优先级越小优先级越高
} Task;
// 比较函数用于排序
int compare_tasks(Task* a, Task* b) {
return a->priority - b->priority; // 按照优先级降序排列
}
// 主函数,初始化任务队列并应用SJF算法
void sjf_scheduler(Task** tasks, int num_tasks) {
Task* sorted_tasks = malloc(sizeof(Task*) * num_tasks);
for (int i = 0; i < num_tasks; i++) {
sorted_tasks[i] = tasks[i];
}
qsort(sorted_tasks, num_tasks, sizeof(Task*), compare_tasks);
int total_wait_time = 0; // 总等待时间
for (int i = 0; i < num_tasks; i++) {
Task* current_task = sorted_tasks[i];
printf("Processing task %d with burst time %d\n", current_task->id, current_task->burst_time);
// 假设CPU立即响应,模拟运行
sleep(current_task->burst_time);
total_wait_time += i * current_task->burst_time; // 计算总等待时间
}
printf("Total wait time for all tasks is %d\n", total_wait_time);
}
int main() {
int num_tasks;
printf("Enter the number of tasks: ");
scanf("%d", &num_tasks);
Task* tasks[num_tasks]; // 创建任务数组
for (int i = 0; i < num_tasks; i++) {
printf("Enter task %d id, burst time and priority: ", i + 1);
scanf("%d%d%d", &tasks[i]->id, &tasks[i]->burst_time, &tasks[i]->priority);
}
sjf_scheduler(tasks, num_tasks); // 调用调度函数
free(sorted_tasks); // 释放内存
return 0;
}
```
在这个代码示例中,用户输入任务的数量以及每个任务的ID、运行时间和优先级。sjf_scheduler函数首先按优先级对任务进行排序,然后逐个调度任务。注意,实际操作中,我们通常无法直接控制CPU去执行,这里通过`sleep()`函数模拟了运行过程。
阅读全文