寄托天下
查看: 116|回复: 9
打印 上一主题 下一主题

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

Rank: 9Rank: 9Rank: 9

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

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

跳转到指定楼层
楼主
发表于 2006-11-3 14:10:10 |只看该作者 |倒序浏览
RT
0 0

使用道具 举报

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联合登录

5
发表于 2006-11-3 15:02:43 |只看该作者
谢!

使用道具 举报

Rank: 9Rank: 9Rank: 9

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

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

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

使用道具 举报

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

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

Aries白羊座 荣誉版主

7
发表于 2006-11-4 00:45:33 |只看该作者
funny codes...heihei
开心法则:
如果你没有不开心的事,你就要开心
如果你有不开心的事,要学会找到开心的事继续开心

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

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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

Pisces双鱼座

8
发表于 2006-11-4 01:20:38 |只看该作者
为什么每次看到代码..还是会有点激动呢...
兔兔,寄托。


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

使用道具 举报

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

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

Leo狮子座 荣誉版主

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

使用道具 举报

Rank: 9Rank: 9Rank: 9

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

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

10
发表于 2006-11-6 11:10:41 |只看该作者
学IT的就是累

使用道具 举报

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

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