C语言模拟进程状态(云班课作业)

作业要求


作业内容

大致思路:

新建(New)一个任务A:int a = 0, a=a+1,创建后进入就绪(Ready)状态,然后运行(Running),但在运行过程中发生阻塞(Waiting),即被任务B(int b = 0, b=b+1)阻塞,然后等B运行完之后运行A,然后退出,进程终止(Terminated)

源代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// 定义进程状态的枚举类型
enum ProcessStatus {
NEW,
READY,
RUNNING,
WAITING,
TERMINATED
};

// 定义进程结构体
struct Process {
int process_id;
enum ProcessStatus status;
};

// 模拟任务A的函数
void taskA() {
int a = 0;
a = a + 1;
printf("Task A: a = %d\n", a); }

// 模拟任务B的函数
void taskB() {
int b = 0;
b = b + 1;
printf("Task B: b = %d\n", b);
}

int main() {
struct Process processA = { 1, NEW }; // 任务A
struct Process processB = { 2, NEW }; // 任务B

// 任务A进入就绪状态
processA.status = READY;

// 任务A开始运行
processA.status = RUNNING;
taskA();

// 任务A发生阻塞,变为等待状态
processA.status = WAITING;

// 任务B运行
processB.status = RUNNING;
taskB();

// 任务A等待任务B运行完毕后再次运行
processA.status = RUNNING;
taskA();

// 任务A完成,进程终止
processA.status = TERMINATED;

return 0;
}

运行结果截图




posted @ 2023-11-26 18:16  20231306周玟妍  阅读(14)  评论(0编辑  收藏  举报