首页 > 试题广场 >

假设有4条语句s1:a=5x;s2:b=5+y;s3:c=a

[单选题]
假设有4条语句s1:a=5x;s2:b=5+y;s3:c=a+b;s4:d=c+y;根据bernstein条件,下面说法正确的是?
  • s1,s4可并发执行
  • s1,s2不可并发执行
  • s2,s3可并发执行
  • s3,s4不可并发执行
A正确。
但是我认为C也正确。
第一种方法:套公式,  s1和s4确实可以并发执行。
若两个程序P1和P2能满足下述条件,它们便能并发执行,否则不能:
 R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={}。
第二种方法:s1和s4都没有互相影响的变量,为什么不可以并发执行。
发表于 2015-11-20 14:25:01 回复(4)
更多回答
推荐
选D
Bernstein条件是指两个过程如果有数据冲突,那么就没法并行执行。
A选项中,s4需要读数据c,而s3中数据c依赖于a,因此s4依赖于s1的结果,s1、s4不可并发执行。
B选项中,s1依赖于x,s2依赖于y,s1和s2之间没有数据冲突,可以并发执行。
C选项中,s3依赖于b,s3和s2之间有数据冲突,不可并发执行。
D选项中,s4需要数据c,s4的执行依赖s3的结果,不可并发执行。

编辑于 2017-08-15 14:29:29 回复(0)
此条件是1966年Bernstein首次提出来,故称为Bernstein条件
若两个程序P1和P2能满足下述条件,它们便能并发执行,否则不能:
 R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={},
  
P1的读集与P2写集的交集、P2的读集与P1的写集的交集、P1的写集与P2的写集的交集,三者同时为空集。
(以上来自百度知道) 
就是读写锁的原理
发表于 2016-07-09 15:35:04 回复(1)
根据题目可得:
W(s1) = {x},R(s1) = {a}
W(s2) = {y},R(s2) = {b}
W(s3) = {a,b},R(s3) = {c}
W(s4) = {c,y},R(s4) = {d}
    根据bernstein条件,对于两个进程S1,S2,如果他们能并行运行,则需满足一下三个条件:
        (1)R(s1)  ∩ W(s2) = {0}
        (2)R(s2)  ∩ W(s1) = {0}
        (3)W(s1)  ∩ W(s2) = {0}
将A,B,C,D答案依次验证一下,很容易就得出答案选A
发表于 2017-05-01 15:08:51 回复(0)
我觉得是s3中,给c赋值,而s4中又在使用c的值计算,也就是在读取c的值,两个不能同时进行
发表于 2015-09-23 22:19:49 回复(3)
个人觉得,这道题出题不严谨,没有声明程序是否按照顺序执行,仅就bernstein条件,我的答案如下:
假设有4条语句s1:a=5x;s2:b=5+y;s3:c=a+b;s4:d=c+y;根据bernstein条件,下面说法正确的是?
A.s1,s4可并发执行
B.s1,s2不可并发执行
C.s2,s3可并发执行
D.s3,s4不可并发执行

方案①:
原理:
根据bernstein条件,对于两个进程S1,S2,如果他们能并行运行,则需满足一下三个条件:
(1)R(s1) ∩ W(s2) = {}
(2)R(s2) ∩ W(s1) = {}
(3)W(s1) ∩ W(s2) = {}
P1的读集与P2写集的交集、P2的读集与P1的写集的交集、P1的写集与P2的写集的交集,三者同时为空集。
分析:
s1:a=5x;
s2:b=5+y;
s3:c=a+b;
s4:d=c+y;

W(s1) = {x}, R(s1) = {a}
W(s2) = {y}, R(s2) = {b}
W(s3) = {a,b}, R(s3) = {c}
W(s4) = {c,y}, R(s4) = {d}

A.({a} ∩ {c,y}) ∪ ({d} ∩ {x}) ∪ ({x} ∩ {c,y}) ={}, s1,s4可并发执行
B.({a} ∩ {y}) ∪ ({b} ∩ {x}) ∪ ({x} ∩ {y}) ={}, s1,s2可并发执行
C.({b} ∩ {a,b}) ∪ ({c} ∩ {y}) ∪ ({y} ∩ {a,b})={b}, s2,s3不可并发执行
D.({c} ∩ {c,y}) ∪ ({d} ∩ {a,b}) ∪ ({a,b} ∩ {c,y})={c} s3,s4不可并发执行

答案:A&D

方案②:在方案①的基础上,如果题目声明是按顺序执行的
分析:A.S4中数据c依赖于S3,而S3中数据a依赖于S1,则S1与S4冲突,不可并发执行;
答案:A答案错误,AD中排除A,最终答案为D
编辑于 2020-01-09 15:26:28 回复(1)
要注意C答案,S1与S4虽然可以并发,但是若并发时,C的值不能确定,会产生问题。
发表于 2016-06-03 20:32:56 回复(0)
选项c为什么错了?
发表于 2015-09-21 16:52:26 回复(2)
本题按照题目顺序执行,s1和s2可以并发执行,因为没有各自变量独立;s2和s3不能并发,因为有公共变量b;同理s3和s4;s1和s4没有公共变量,但中间包含s2和s3,若并发执行,d和c无法最终确定。
发表于 2015-10-11 11:33:47 回复(1)
这样看好多了
a = 5*x
b = 5 + y
c = 5*x + 5 + y
d = 5*x + 5 + y + y


发表于 2020-04-26 17:43:52 回复(0)
s1:a=5x;
s2:b=5+y;
s3:c=a+b;
s4:d=c+y;
觉得竖着看,换个角度,就容易多了:)
发表于 2018-03-11 23:25:25 回复(0)
没说按顺序
发表于 2021-12-23 01:09:52 回复(0)
那你也没说是按照你写这个顺序运行啊
发表于 2021-10-14 20:57:33 回复(0)

D

编辑于 2020-06-06 01:36:07 回复(0)
Bernstein条件就是讲两个过程如果有数据冲突,那么就没法并行执行
即一个过程的结果不会在另一个过程中用到。
也可以这样理解:两个过程按不同的顺序执行,得到的结果相同,则它们可以并发执行。
发表于 2019-10-10 20:12:26 回复(0)
Bernstein条件:如若两个过程存在数据冲突,则无法并行执行。
A. S4中数据c依赖于S3,而S3中数据a依赖于S1,则S1与S4冲突,不可并发执行;
B. S1与S2中并无数据冲突,因而可以并发执行;
C. S3中数据b依赖于S2,则S2与S3冲突,不可并发执行;
D. S4中数据c依赖于S3,则S3与S4冲突,不可并发执行。
发表于 2018-08-11 22:33:39 回复(0)
存在数据依赖的不会被重排序,但是依然会被线程抢夺使用,需要开发人员同步。、
数据依赖指 后面的表达式的操作数依赖前一个表达式中的操作数
所有架构cpu都不允许有数据依赖的重排序,
cpu指令重排序目的:消除CPU指令流水线之间的等待。做到无缝结合,节省时间。
发表于 2018-03-03 16:13:50 回复(0)
AC 都是对的吧
发表于 2017-06-14 18:04:21 回复(0)
一个原则:并发情况下,共享变量执行要保证原子性。
发表于 2017-05-31 09:28:51 回复(0)

如果一个输出是另一个的输入时,两者不能并发;(s3和s4)
如果执行结果和两条语句的执行顺序有关系时二者也不能并发;
发表于 2017-04-10 17:13:13 回复(0)
大家了解一下bernstein条件这类题就迎刃而解了
发表于 2017-04-01 16:26:41 回复(0)