C++でのラウンドロビンスケジューリングの実装方法


ラウンドロビンスケジューリングは、複数のタスクやプロセスを順番に実行するスケジューリングアルゴリズムです。各タスクは一定の時間スライスを割り当てられ、そのスライスが終了すると次のタスクに切り替わります。

以下に、C++でのラウンドロビンスケジューリングの実装方法を示します。

#include <iostream>
#include <queue>
using namespace std;
// タスクを表す構造体
struct Task {
    string name;
    int burstTime;
};
// ラウンドロビンスケジューリングの関数
void roundRobinScheduling(queue<Task>& tasks, int timeSlice) {
    while (!tasks.empty()) {
        Task currentTask = tasks.front();
        tasks.pop();
        if (currentTask.burstTime >= timeSlice) {
            cout << currentTask.name << "を実行中..." << endl;
            currentTask.burstTime -= timeSlice;
            if (currentTask.burstTime > 0) {
                tasks.push(currentTask);
            }
        } else {
            cout << currentTask.name << "を実行中..." << endl;
            cout << currentTask.name << "の実行が完了しました" << endl;
        }
    }
}
int main() {
    // タスクのキューを作成
    queue<Task> tasks;
    // タスクを追加
    Task task1 = {"タスク1", 10};
    Task task2 = {"タスク2", 5};
    Task task3 = {"タスク3", 8};
    tasks.push(task1);
    tasks.push(task2);
    tasks.push(task3);
    // ラウンドロビンスケジューリングを実行
    int timeSlice = 3;
    roundRobinScheduling(tasks, timeSlice);
    return 0;
}

上記のコードでは、Taskという構造体を定義しています。各タスクは名前と実行時間を持っています。roundRobinScheduling関数は、タスクのキューとタイムスライスの長さを受け取り、スケジューリングを行います。タスクは順番に実行され、実行時間がタイムスライスよりも長い場合はタスクが途中で切り替わります。

上記の例では、3つのタスクがあり、タイムスライスは3です。タスク1がまず実行され、3ユニットの実行時間が経過するとタスク2に切り替わります。次に、タスク3が実行され、8ユニットの実行時間が経過するとタスク1に切り替わります。このプロセスが繰り返され、各タスクが順番に実行されます。

このようにして、C++でラウンドロビンスケジューリングを実装することができます。このコードを参考にして、必要に応じてカスタマイズしてください。