面试题答案
一键面试思路
- 创建一个信号量,初始值为0。
- 进程A执行计算任务,计算完成后,通过信号量的V操作(释放信号量)通知进程B。
- 进程B在开始读取数据前,通过信号量的P操作(获取信号量)等待进程A的通知,只有获取到信号量后,进程B才能读取进程A的计算结果并进行后续处理。
伪代码
// 定义信号量,初始值为0
Semaphore semaphore = 0;
// 进程A
Process A() {
// 执行计算任务
performCalculation();
// 计算完成,释放信号量通知进程B
V(semaphore);
}
// 进程B
Process B() {
// 获取信号量,等待进程A的通知
P(semaphore);
// 读取进程A的计算结果并进行后续处理
readAndProcessResult();
}
在上述伪代码中,P
操作表示获取信号量(若信号量值为0则阻塞等待),V
操作表示释放信号量(将信号量值加1)。performCalculation
函数代表进程A执行的计算任务,readAndProcessResult
函数代表进程B读取进程A的结果并进行处理的操作。具体实现时,需根据不同操作系统和编程语言使用对应的信号量API来替换P
和V
操作。