1. (简答题) 自己画进程图,每人都不会一样的,包含10个并发进程,用wait和signal原语,采用C伪代码实现并发进程的同步关系。图画在纸上,伪代码也在同一纸上,签字、拍照、上传到学习通。或者画在Word中上传。注意写上姓名和学号。
时间: 2024-10-18 12:08:14 浏览: 25
电大操作系统简答题.pdf
在解决这个问题之前,首先需要了解的是wait和signal是用于线程通信的原语,它们通常在互斥锁(mutex)、信号量(semaphore)等同步机制中一起使用。为了清晰地表示10个并发进程之间的同步关系,我们可以创建一些共享资源,并通过wait/signal来控制访问。
这里是一个简单的C伪代码示例,假设我们有一个计数器resource(可以看作全局变量),初始值为10,表示可供分配的任务。每个进程P1-P10都有一个任务,需要获取资源并完成任务后再释放资源:
```c
// 定义信号量sem,初始化为10
Semaphore sem = {10};
// 进程P1 - P10 的函数原型
void* Proc(int proc_num) {
while (true) {
// 当资源大于0时,进程尝试获取资源
if (sem.value > 0) {
sem.decrement();
// 执行任务...
// [在这里添加具体的任务代码]
// 当任务完成后,释放资源
sem.increment();
} else {
// 等待其他进程释放资源
Wait(sem);
}
}
}
// 初始化10个进程
for (int i = 1; i <= 10; i++) {
pthread_t thread;
pthread_create(&thread, NULL, Proc, (void*)i);
}
// 父进程启动所有子进程后退出
pthread_join_all(thread_list, NULL);
// 确保所有进程结束,然后你可以画出进程图
// 过程图应该描绘每个进程如何等待/释放资源以及流程顺序
```
在这个例子中,进程会形成一种交替的模式:先有足够资源的进程开始工作,当它完成任务释放资源后,没有获得资源的进程会进入等待状态直到资源可用。你需要在这基础上细化每个进程的具体交互步骤,画出并发执行的流程图。
至于将图纸制作成图片或PDF文件,可以选择手绘后扫描上传,或者使用在线绘图工具(如Microsoft PowerPoint、Lucidchart等)绘制后保存上传至学习通。别忘了在图表旁边注明你的姓名和学号。
阅读全文