郁闷,帮我!---->明天就要讲了.

teacher1998 2006-05-11 12:57:08
有两个进程P1和P2共享变量count,当进程P1,P2按下述顺序执行时一次为(R1和R2是处理机中寄存器):

  P1: R1=count;
    R1=R1+1;
     count=R1;

  P2:  R2=count;
     R2=R2+1;
     count=R2;

  其结果使count增加了2,正确;但当P1和P2按另一种顺序对变量count修改,即交叉执行一次,例如:

  P1: R1=count;
  P2: R2=count;
  P1: R1=R1+1;
    count=R1;
  P2: R2=R2+1;
    count=R2;

  虽然P1和P2都各自对count做了一次加1操作,但count最后的结果仅增加了1,因为P1加1操作无效,发生了与执行顺序有关的错误。为了预防这种错误的发生,对变量count也应按临界资源处理,即采取措施强迫P1和P2顺序访问count,即互斥访问count。

在上面的互斥的例子中,第一个我懂,可是第二个中说到:
但count最后的结果仅增加了1,因为P1加1操作无效,发生了与执行顺序有关的错误

这句话该怎么理解?为什么P1加1无效?从哪里看出发生了与执行顺序有关的错误?
if count=6 那么按照:

P1: R1=count;
  P2: R2=count;
  P1: R1=R1+1;
    count=R1;
  P2: R2=R2+1;
    count=R2;
有:
P1: R1=count=6;
  P2: R2=count=6;
  P1: R1=R1+1=7;
    count=R1=7;
  P2: R2=R2+1=7+1=8;
    count=R2=8;
结果还是加了2啊!

请达人解惑,;谢!
另,本来想发到os版,可是这里人较多,就发这了,请版竹谅解.
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
teacher1998 2006-05-11
  • 打赏
  • 举报
回复
多谢
webwait 2006-05-11
  • 打赏
  • 举报
回复
int i=6;
int temp1,temp2;
temp1=i;
temp2=i;
temp1=temp1+1;
i=temp1;
temp2=temp2+1;
i=temp2;
按程序解释,你看看i的值
webwait 2006-05-11
  • 打赏
  • 举报
回复
P2: R2=R2+1=7+1=8;------>在这里,count地址单元的值改为了7+1,你看是吗?
===
寄存器里存的是变量count,不是地址
就按地址解释吧,你这里也不对,R2之前没有变呀,一直是6
这里还是6+1=7
webwait 2006-05-11
  • 打赏
  • 举报
回复
好像是这样解释的:那count为6说吧
P1: R1=count;//count存入R1中,R1中存的6
P2: R2=count;//count存入R2中,R2中存的6
P1: R1=R1+1;//R1中的值+1,R1中存的6+1=7
count=R1;//R1中的值赋给count,count为7
P2: R2=R2+1;//R2中的值+1,R2中存6+1=7
count=R2;//R2中的值赋给count,count为7
teacher1998 2006-05-11
  • 打赏
  • 举报
回复
应该怎样理解?寄存器相关?我不懂寄存器哦.但我想寄存器本质上也是地址单元吧,count是一个变量,所以:
1: R1=count=6;
  P2: R2=count=6;
  P1: R1=R1+1=7;
    count=R1=7;------>在这里,count地址单元的值改为了7
  P2: R2=R2+1=7+1=8;------>在这里,count地址单元的值改为了7+1,你看是吗?
    count=R2=8;
webwait 2006-05-11
  • 打赏
  • 举报
回复
这是系统结构里的问题吧,存在寄存器相关的问题
不能用你的方法解释

62,071

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧