寄托天下
查看: 115|回复: 9

[未归类] 求哲学家吃饭问题源代码 [复制链接]

Rank: 9Rank: 9Rank: 9

声望
205
寄托币
40936
注册时间
2005-6-24
精华
21
帖子
270

荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-3 14:10:10 |显示全部楼层
RT

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
46
寄托币
46892
注册时间
2004-9-17
精华
52
帖子
507

Virgo处女座 荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-3 14:41:01 |显示全部楼层
program dining
const N=5;
STARVELIMIT=100;
var
starvation.0..0: integer[0];
deadlock.0..0: integer[0];
iter.0..0: integer[0];
fork.1..N: integer [all(, j:1..N | 0)];
want2eat.1..N: integer [all(, j:1..N | 0)];
eat.1..N: integer [all(, j:1..N | 0)];
eatcount.1..N: integer [all(, j:1..N | 0)];
process
p: 1..N
actions
-- Philosopher decides he wants to eat
(want2eat.p == 0) and
(fork.(1 + ((p+N-1) mod N)) == 0) and
(fork.(1 + (p mod N)) == 0)
        -> iter.0:= iter.0+ 1;
           want2eat.p := iter.0
[]
-- Philosopher can pick up left fork
(want2eat.p > 0) and
(fork.(1 + ((p+N-1) mod N)) == 0)
        -> fork.(1 + ((p+N-1) mod N)) := p;
           iter.0:= iter.0+ 1
[]

-- Philosopher can pick up right fork
(want2eat.p > 0) and
(fork.(1 + (p mod N)) == 0)
        -> fork.(1 + (p mod N)) := p;
           iter.0:= iter.0+ 1
[]
-- Philosopher starts eating
(want2eat.p > 0) and
(eat.p == 0) and
(fork.(1 + ((p+N-1) mod N)) == p) and
(fork.(1 + (p mod N)) == p)
        -> eat.p := 1;
           eatcount.p := eatcount.p + 1;
           iter.0:= iter.0+ 1
[]
-- Philosopher decides to stop eating
(eat.p == 1) and
(want2eat.p > 0)
        -> want2eat.p := 0;
           iter.0:= iter.0+ 1
[]
-- Philosopher stops eating and lays down forks
(eat.p == 1) and
(want2eat.p == 0)
        -> eat.p := 0;
           fork.(1 + ((p+N-1) mod N)) := 0;
           fork.(1 + (p mod N)) := 0;
           iter.0:= iter.0+ 1
[]

-- Deadlock occurs when everybody wants to eat and everybody
-- holds one and only one fork.
(all (and j:1..N | (
  (want2eat.j > 0) and
  (
   ((fork.(1 + ((j+N-1) mod N)) == j) and (fork.(1 + (j mod N)) != j)
     and (fork.(1 + (j mod N)) != 0)) or
     ((fork.(1 + (j mod N)) == j) and (fork.(1 + ((j+N-1) mod N)) != j)
     and (fork.(1 + ((j+N-1) mod N)) != 0))
    )
   )
  )
)
        -> deadlock.0 := 1;
           iter.0:= iter.0+ 1
[]

-- Starvation occurs when some philosopher has wanted to eat for
-- too many iterations
(want2eat.p > 0) and
(iter.0 > (want2eat.p + STARVELIMIT))
        -> starvation.0 := p;
           iter.0 := iter.0 + 1
topology 5 ring
semantics interleaving
invariant
        (deadlock.0 == 0) and
        (starvation.0 == 0)
An opportunity is never lost but missed,
an opportunity missed is never lost but found by others.

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
205
寄托币
40936
注册时间
2005-6-24
精华
21
帖子
270

荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-3 14:47:20 |显示全部楼层
谢谢tony

但是有的地方看不懂,能否大致说说思路?

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
46
寄托币
46892
注册时间
2004-9-17
精华
52
帖子
507

Virgo处女座 荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-3 14:56:52 |显示全部楼层
An opportunity is never lost but missed,
an opportunity missed is never lost but found by others.

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
205
寄托币
40936
注册时间
2005-6-24
精华
21
帖子
270

荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-3 15:02:43 |显示全部楼层
谢!

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
100
寄托币
121988
注册时间
2005-1-22
精华
26
帖子
153

Leo狮子座 荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-3 22:19:51 |显示全部楼层
靠 什么乱七八糟 呵呵
所有的悲伤,总要留下一丝快乐的线索;所有的遗憾,总要留下一处完美的角落。
不立目标,不求方向,自然,宁静,清澈,淡泊,包容,与世无争,充满了清灵之气。

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
15
寄托币
60462
注册时间
2002-9-3
精华
2
帖子
103

Aries白羊座 荣誉版主

发表于 2006-11-4 00:45:33 |显示全部楼层
funny codes...heihei
开心法则:
如果你没有不开心的事,你就要开心
如果你有不开心的事,要学会找到开心的事继续开心

哇哈哈哈哈~~~(做动感超人状)

在我死之前,我想吃小熊饼干~~~

使用道具 举报

Rank: 10Rank: 10Rank: 10

声望
250
寄托币
19226
注册时间
1970-1-1
精华
25
帖子
270

Pisces双鱼座

发表于 2006-11-4 01:20:38 |显示全部楼层
为什么每次看到代码..还是会有点激动呢...
兔兔,寄托。


(\__/)
(='.'=)
(")_(")

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
46
寄托币
37961
注册时间
2002-6-23
精华
11
帖子
78

Leo狮子座 荣誉版主

发表于 2006-11-4 02:16:30 |显示全部楼层
现在看到代码就头晕
烟花巷陌,依约丹青屏障。幸有意中人,堪寻访。且恁偎红翠,风流事、平生畅。青春都一饷。忍把浮名,换了浅斟低唱。

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
205
寄托币
40936
注册时间
2005-6-24
精华
21
帖子
270

荣誉版主 挑战ETS奖章 QQ联合登录

发表于 2006-11-6 11:10:41 |显示全部楼层
学IT的就是累

使用道具 举报

RE: 求哲学家吃饭问题源代码 [修改]

问答
Offer
投票
面经
最新
精华
转发
转发该帖子
求哲学家吃饭问题源代码
https://bbs.gter.net/thread-548753-1-1.html
复制链接
发送
回顶部