分析:
1.定义结构体类型Command
1 | typedef struct Node { |
2.处理输入
使用stringstream
处理空格,得到各收发指令。每个进程的收发指令,使用queue<Command>
存储;每份样例代码,使用vector<queue<Command> > arr
存储。
3.执行模拟操作
执行如下循环:
遍历arr,若当前进程arr[i]
不为空,此时,如果队首指令cmd的目标进程arr[cmd.target]
为空,则循环结束,出现死锁;
否则,判断目标进程队首指令cmd2
的状态与cmd的状态是否相符,以及cmd2的目标进程是否为当前进程,即cmd.status + cmd2.status == 1 && cmd2.target == i
,
若上述条件满足,则对当前进程和目标进程执行出队操作,继续遍历当前进程的下一个指令。
当遍历arr,没有出队操作时,循环结束。
此时,若arr中任一进程不为空,则表示出现了死锁;否则,表示程序顺利执行。
1 |
|