求并行的各个进程,且进程内部顺序执行的情况下,会不会出现“死锁”。

首先用\(%[^\n]\)将每个进程读入。最后过不了居然是因为\(str[\ ]\)开小了(悲喜交加。存储在\(<op,\ pid>[\ ]\)中,并记录每个进程的指令数\(instNum[\ ]\)。

然后就是模拟。\(instCmp[\ ]\)记录每个进程已完成的指令数,\(instBlk[\ ]\)记录每个进程是否阻塞,\(numCmp,\ numBlk\)分别是完成和阻塞的进程数。主要思想是:每次执行到某条指令阻塞,然后执行下条指令并循环。判断是否阻塞,就是看\(<op, pid>\)对应的\(pid\)进程当前已完成的指令是否有下一条指令,以及下一条指令是否与之配对。

#include <bits/stdc++.h>
const int maxn = 10000; using namespace std; struct tInst
{
int op;
int pid;
};
tInst inst[maxn+10][10];
int instNum[maxn+10]; int instCmp[maxn+10];
int instBlk[maxn+10];
int numCmp, numBlk; int main ()
{
int T, n;
scanf("%d%d", &T, &n);
getchar(); while (T--)
{
memset(instNum, 0, sizeof(instNum));
for (int i = 0; i <= n - 1; i++)
{
char str[100];
scanf("%[^\n]", str + 1);
getchar();
for (int j = 1, op = 0, pid = 0; ; j++)
{
if (str[j] == 'R')
op = 0;
else if (str[j] == 'S')
op = 1;
else if (str[j] >= '0' && str[j] <= '9')
pid = pid * 10 + str[j] - '0';
else if (str[j] == ' ')
{
inst[i][++instNum[i]].op = op;
inst[i][instNum[i]].pid = pid;
pid = 0;
}
else
{
inst[i][++instNum[i]].op = op;
inst[i][instNum[i]].pid = pid;
break;
}
}
} memset(instCmp, 0, sizeof(instCmp));
memset(instBlk, 0, sizeof(instBlk));
numCmp = numBlk = 0; int x = 0;
while (numCmp + numBlk != n)
{
while (instCmp[x] != instNum[x] && !instBlk[x])
{
int y = instCmp[x] + 1;
int op = inst[x][y].op, pid = inst[x][y].pid;
int xx = pid;
if (instCmp[xx] != instNum[xx])
{
int yy = instCmp[xx] + 1;
if (op + inst[xx][yy].op == 1 && x == inst[xx][yy].pid)
{
instCmp[x] ++; instCmp[xx] ++;
if (instCmp[x] == instNum[x])
numCmp ++;
if (instCmp[xx] == instNum[xx])
numCmp ++;
if (instBlk[xx])
{
instBlk[xx] = 0;
numBlk --;
}
}
else
{
instBlk[x] = 1;
numBlk ++;
}
}
else
{
instBlk[x] = 1;
numBlk ++;
}
}
x = (x + 1) % n;
} if (numCmp == n)
printf("0\n");
else
printf("1\n"); } return 0;
}

CCF-CSP题解 201903-4 消息传递接口的更多相关文章

  1. CCF CSP 201503-4 网络延时

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-4 网络延时 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机 ...

  2. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  3. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  4. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  5. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  6. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  7. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  8. CCF CSP 201503-3 节日

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...

  9. CCF CSP 201509-2 日期计算

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-2 日期计算 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? ...

  10. CCF CSP 201604-2 俄罗斯方块

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-2 俄罗斯方块 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游 ...

随机推荐

  1. 2019-11-6:ubuntu安装配置JAVA环境

    1,下载JAVA,官方java 18下载网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331 ...

  2. JVM(2)--深入理解java对象创建始终

    java对象探秘 java是一门面向对象的语言,我们无时无刻不在创建对象和使用对象,那么java虚拟机是如何创建对象的?又是如何访问对象的?java对象中究竟存储了什么运行时所必需的数据?在学习了ja ...

  3. 为什么坚果云Markdown值得使用?

    值得使用说明是被认为有价值的,值得有两种意思的解释:1.有价值,有意义:2.价钱合适,合算:那么坚果云Markdown是否是人们值得使用的呢?下面就来看看坚果云Markdown到底是什么?为什么值得使 ...

  4. 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同

    原文链接:http://www.cnblogs.com/xiaoyou2018/p/10677437.html Windows server 2012 R2 解决"无法完成域加入,原因是试图 ...

  5. Django3.0 异步通信初体验

    此前博主曾经写过一篇博文,介绍了Django3.0的新特性,其中最主要的就是加入对ASGI的支持,实现全双工的异步通信. 2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我 ...

  6. 复制节点(cloneNode)

    DOM提供用来复制节点方法. cloneNode():将为给定节点创建一个副本,这个方法的返回值是一个指向新建克隆节点的引用指针, reference = node.cloneNode(deep) 这 ...

  7. 以传参的方式执行shell(模板)

    以传参的方式执行shell(模板) #!bin/bash # USE: Template # author : xiaowei # -- # state : -name 选项必选,,, -v -m 选 ...

  8. socket实现ftp上传下载

    socket实现ftp文件的上传和下载 server端代码: import socket import json import struct import os soc = socket.socket ...

  9. PTA 1140 1141 1142 1143

    1140 Look-and-say Sequence 思路:模拟 #include<bits/stdc++.h> using namespace std; typedef long lon ...

  10. Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...