打印

七哲学家就餐实验程序演示

[复制链接]
楼主: 刘前辈
手机看帖
扫描二维码
随时随地手机跟帖
21
Downcloud 的Proteus 改进图做的太棒了!真漂亮,我想画的就是这个意思。

这两天整理一下把你的图贴上来,肯定为7哲学家模拟实验增辉不少。多谢啦。


     Hot大叔的反汇编 能把哲学家就餐程序TEST2s7.hex 反汇编5 ...
刘前辈 发表于 2011-10-20 09:08


在将disasm51移植到VC或Delphi。

哈哈,51的反汇编对俺才是儿戏~~~

俺喜欢听“爱江山更爱美人”~~~感觉那时才更有灵气和霸气~~~

使用特权

评论回复
22
highgear| | 2011-10-21 08:22 | 只看该作者
Dijkstra的伟大之处是他把一些具体的计算机问题高度抽象,几乎变成了一些哲学问题。他更像是一个思想家,而不仅仅是一个计算机专家。

使用特权

评论回复
23
wangbo11456| | 2011-10-21 08:48 | 只看该作者
喜欢 收藏

使用特权

评论回复
24
刘前辈|  楼主 | 2011-10-21 09:46 | 只看该作者


确实不错,收藏了。详细的论文全稿不止这些。——网上公开的只能这样写个大概。

后来所有研究OS的学者都会研究这个经典问题,以至现在的教材论述比论文更详细了。其实还有很多其他经典问题:像理发店问题,面包店问题,读写这问题,等等。都很精彩。


、、

使用特权

评论回复
25
刘前辈|  楼主 | 2011-10-21 10:56 | 只看该作者
本帖最后由 刘前辈 于 2011-10-21 11:07 编辑
16#highgear
3) “Dijkstra 的哲学家就餐经典问题首先条件就是哲学家人数为奇数”, 我kao, 竟然还有这样认为人数为偶数,死锁就不存在的蠢人!!! 真不知道刘公公你的哲学家就餐的研究生论文是如何通过的?


所长的毛病就在于爱装聪明,不懂装懂。也不好好看看我说的是什么,回家多看看OS原理再来吧:
如果9个哲学家吃饭,你画的的8个哲学家图享受9把叉子,于是:定然有一个人可以拿到2把叉子!9个人一人拿一把叉子的死锁条件当然不存在。连哲学家就餐问题中的死锁条件是什么都不知道,还在这鼻子里插葱?扯什么呀:我说的是7个人就餐的情况!——脑子也不多转个弯。

如今真是没学过操作系统的本科生所长,比我专业研究OS的硕士生还厉害!

哈哈,告诉你为什么就餐人数不能为奇数:张开你所长的猪耳朵听好了,我想表达的是什么:

假若有2N-1个哲学家就餐,你一定要安排2N个人叉,那么肯定有一个人的吃饭次数比其他人少!这是饥饿问题,正和死锁问题相反!——你又装懂了吧。

   ——哈哈……又露怯了,别人在这谈饥饿问题,他还以为是死锁?2回事耶。

举例:我写的“7个哲学家就餐实验程序”,你在这个程序再加入一个哲学家——8个人就餐,程序运行后明显看到有一灯亮的次数少。其它灯点亮吃饭次数都是正常一致的。——你可以就餐人数偶数,只要你不怕饥饿-饿死。

哈,教材上有理论证明,不做考试要求(复杂)。可惜你这种人不看书,还总以为自己什么都懂。你当研究生是干什么的?一个令牌环就把你吓得哑巴,还总拿着点LED灯的题目在这装事?!——你那道什么“敢不敢PK”的LED题目,我昨天晚上一小时就完成了,还以为是难题拿出来忽悠老刘?

       切,对没学过OS的人,确实是难题,甚至非常难。采用OS 多任务机制来解,根本就是小儿科题目。……

     这倒说明了一个问题,出这种题目自以为难题的人,根本不知道什么叫操作系统!也根本不会用操作系统解题。所长无意露怯自己根本不知道什么叫操作系统。还在那装腔作势?

        “N个按键,控制8路LED,……一个按下增长闪烁频率,每秒增一;另一个按下降低闪烁频率,每秒减一。……”

        唉,拿着这种题目PK ?叫嚣了三年,还以为别人不敢。其实是别人不屑玩这种OS小儿科题目耶……

     建议所长自己用OS 先把这道题先自己解一下,自己弄明白了才能知道别人3年硕士学的是什么。否则还总以为自己什么都懂呢。

     要不要我贴给你这道题目的源代码,你可以在Proteus上运行一下,看看别人怎么玩的,简单得不得了。你玩了三年还没头绪吧。我教教你,3小时就解决啦……。

    以后要PK ,自己先学好操作系统概念再来吧,自己都解不了的题目拿来和别人PK ?  “我这有道难题……”结果别人一看是小儿科,让人看你笑话:“这人思维有毛病吧?……”。


、、

使用特权

评论回复
26
刘前辈|  楼主 | 2011-10-21 11:19 | 只看该作者
所长看来要收回你的LED频率控制PK题目了。刚刚哲学家就餐输了一把,又玩几年前的LED控制了?
    给你留点面子,否则再输了怎么办?总不会急眼了:“我还会VS那,你会吗……”
  
     哈哈……我知道你还会notepad,小学生都会的东西,老刘从来不玩。研究生不是万金油。博士、教授更不是了,更不会玩VS 啦……您慢慢玩,54岁再学什么都来不及了。裸奔单道写出了个多线程?糊弄123jj 还行,她会玩收音机,你不会吧……


、、

使用特权

评论回复
27
华山123| | 2011-10-21 11:26 | 只看该作者
:dizzy:

使用特权

评论回复
28
华山123| | 2011-10-21 11:26 | 只看该作者
:dizzy:

使用特权

评论回复
29
andy1wang| | 2011-10-21 14:14 | 只看该作者
留名

使用特权

评论回复
30
刘前辈|  楼主 | 2011-10-21 16:43 | 只看该作者
本帖最后由 刘前辈 于 2011-10-21 19:28 编辑

太让人兴奋了!中午一小时证明了哲学家就餐人数为什么必须是奇数2N+1 !所长搬起石头打自己的脚:你不支声,没人知道你不懂,偏要站出来说几句装懂的话,结果露大怯了:

   16,17楼 highgear 所长

     3) “Dijkstra 的哲学家就餐经典问题首先条件就是哲学家人数为奇数”, 我kao, 竟然还有这样认为人数为偶数,死锁就不存在的蠢人!!! 真不知道刘公公你的哲学家就餐的研究生论文是如何通过的?


下面证明一下,看看究竟谁是蠢人,俺太得意了……要不要再给54岁的所长留点面子?自己收回,还是向俺道歉,还是以后继续不懂装明白?看下面示意图:





假定偶数4个哲学家就餐,4把叉子可以同时2个人吃饭,假定1、3同时吃饭,2、4由于拿不到叉子,只好(休眠)等待;当1、3 两个人吃完饭,放回叉子时,按照 Dijkstra 信号量休眠唤醒机制,有责任唤醒等待叉子资源的伙伴;——也即:1号哲学家吃完饭应该唤醒左右 2、4 两个伙伴拿叉子吃饭,3号哲学家应该唤醒 4、2 两个伙伴。

           问题来了,假定1号和3号两个人同时吃完饭,并同时检测自己左右两个伙伴是否满足2把叉子资源条件时,——都不满足!

例如(唉!这么明显的问题,54岁的所长还想不明白……):1号测查右手伙伴(休眠者)4号是否满足左右手(在1号,3号手里)都有空叉子时,由于3号没有放下叉子,所以4号因缺乏资源而不能被唤醒;同理,1号左手伙伴休眠者2号也不满足唤醒条件。结果1号无奈,吃完饭后只好放下叉子,Thinking去了。唤醒义务一点没尽到。
        再看3号,由于是和1号并发行为,也无奈放下叉子进入Thinking 。结果等待叉子吃饭的2号、4号哲学家继续休眠,忍耐饥饿。

        哈哈,再加上一个5号哲学家就大不一样啦;如图:




不用讲下去了吧,这时1号检测的右手伙伴是5号,5号已经有了一把叉子的资源,等待的是1号手里的另一把叉子,1号正好吃完饭交给5号,结果1号成功唤醒伙伴5号,——5号吃完当然有责任唤醒4号,于是系统连续运行下去,不会出现饥饿现象和系统不正常停止现象了。对于另一就餐完毕者3号哲学家情况相同,即使他和1号并发行为,但这时当他唤醒左手伙伴4号哲学家时,测试到4号的左右资源不再是1号没放下的叉子,而是5号放在桌子上的叉子资源,结果唤醒4号条件满足。……

       推广到任意偶数,原理一样。加了一个奇数哲学家,意义深远,——他总保留一把和其他人没有关系的叉子;说简单点,所有问题都是因为人类有2只手——偶数。

且看唤醒程序源代码就清楚了:
void  test ( i )
{
if ( state [ i ]= =HUNGRY && state [LEFT] !=EATING && state [RIGHT ] !=EATING )
{
state [ i ]=EATING;
up ( & s[ i ] );
}
}



、、

使用特权

评论回复
31
highgear| | 2011-10-21 21:07 | 只看该作者
要看到 8 哲学家死锁很简单,在 10 楼附件的philosophers.cs 中加入一句
                public void Dine()
                {
                        lock (this) {
                                Left.TakenBy(this);
                                Thread.Sleep(200);   //加入这句,保证哲学家公平
                                Right.TakenBy(this);
                        }

只要保证公平,没有手快的哲学家,就可以看到死锁的发生。

拿哲学家就餐做研究生论文就够丢人的了,竟然连这么简单的逻辑问题都搞不懂,真不知道刘公公是怎么毕业的。


同时,再问一次:
刘公公你有没有胆量PK?

使用特权

评论回复
32
Cortex-M0| | 2011-10-22 09:14 | 只看该作者
呵呵~~~

highgear老师 的PK 讲究哄动性,广告效应好,但不会有结果 ------ 没人有胆量接受PK。

还是散会吧~~~  :D

使用特权

评论回复
33
刘前辈|  楼主 | 2011-10-22 12:37 | 只看该作者

劝劝所长,要骂娘回家骂你傻儿子娘去……别在论坛上撒野

本帖最后由 刘前辈 于 2011-10-22 19:28 编辑
  31#
死锁是因为大家同时拿起了一把叉子, 而导致没有人能拿起两把叉子造成的,与奇偶无关。还证明,这只能证明你弱智。


哈哈……highgear 的海默症状又有发展,“没学过OS的本科生比我专业硕士还厉害?”竟然可以看得懂我的论文,还能给与评审?

我分明证明的是饥饿问题,一再讲明与所长认为的死锁问题根本无关!结果所长还在这大谈死锁;你懂不懂什么叫饥饿?再说一遍,饥饿问题正与死锁问题不同;所长也就只知道我刚告诉他的,每人手里拿一把叉子在OS研究中称死锁现象,你就不知道什么叫饥饿现象吧。哈哈,告诉你也讲不出来。——还真不是笑话你没学过。

      很容易证明的的概念: 5哲学家就餐解决了饥饿问题,但是死锁概率依然存在。看懂这句话了吗?死锁问题与就餐者人数奇数/偶数根本没关系,——但是偶数会产生饥饿现象,——饥饿现象不会造成死机,1号、3号的并发小概率行为只是使 2号、4号少吃了一顿饭,一直处在HUNGRY状态,无法进入THINKing状态而已。
     唉……跟这种OS文盲交流真费劲,连哲学家就餐的3个状态都不知道,还假模假式地在这讨论死锁?

      那叫饥饿问题耶……
   
       死锁是一种自旋锁,(不敢采用信号量睡眠/唤醒机制)只是饥饿问题的特例。……

         饥饿问题更广义,饥饿进程可以是1 个。饥饿进程所需要的资源可以被任何其他进程抢占;他不知道抢占者是谁,只能采用信号量机制睡眠以等待抢占者唤醒。

        所长的毛病就是除了骂娘,说不出个所以然。

哈哈:越讲书,所长越恼怒:“只能说教授脑子进水了……”可笑啊本科生所长。
            再提醒所长一遍,老刘除了讲述书上教授写的内容之外,也没什么自己的东西了。

           “写书的人都是脑子进水的……。”

哈哈,脑子没进水的所长54岁不成家,年轻时就发誓一生不结婚立志写一本书扬名世界,二十多年了一个字也没写出来啊。

        如今看谁写书都来气,老刘若以书引证更是让所长跳墙啦。



、、

使用特权

评论回复
34
刘前辈|  楼主 | 2011-10-22 14:05 | 只看该作者
本帖最后由 刘前辈 于 2011-10-22 14:20 编辑

所长说死锁问题和吃饭人数奇数 / 数没关系;本来就没关系。

死锁现象是就餐的每个人同时拿起了右手或左手——属于自己的叉子,有一个人乱拿的,就不会产生死锁。(所长忘了说前提条件,他还没真弄懂左右手唤醒机制呢。所有就餐人左右手必须是统一、一致、同时。不知道这里的机制就装懂?到底是左手还是右手是属于自己的叉子?)

呵呵,别人说的是:服务员给就餐人数N多提供一把叉子资源,死锁就不会发生!N可以是任何奇偶数。

——这还用多说吗?这样一来,必然有一个人能拿到2把叉子,开吃。

服务员是谁:程序员自己呀……

所长怎么也转不过弯,“无论奇数偶数,都会产生死锁!这么蠢的问题还想不到,还算学过OS的研究生……你那导师真是愚蠢透了。”


我还需要给这种老人讲什么饥饿问题的解决方法么?那更转不出弯了……


这就叫代沟吧。老人急眼了可以骂,年轻人只能哑然失笑……本想拿出书来举证“你总不会比教授厉害吧,书总不会错吧。”呵呵,越拿书所长越气,“书也是错的……”

老人有个特点,就是谁都必须听他的,否则就来气,就要骂娘;所长提前进入老年期了?才54呀 ……
      
不过从我来看,54岁对我来说确实挺可怕的。比我年老 2轮 !是得考虑尊重他点,所以以后建议所长别找论坛上的年轻人PK ,输了 自己生气,想赢又赢不了。然后再来,越输越气 。越气越要赌PK,连VS都上啦。




所以,像HOT大叔那样,随着年龄的增长,不断学习进取的年长之人,肯定会学习到生命的最后一刻。像乔布斯,把生命的脑力开始衰减之年透支到中年最后时光,英年早逝也活的值了。

、、

使用特权

评论回复
35
Ryanhsiung| | 2011-10-22 20:14 | 只看该作者
刘兄,什么都别说,贴出原代码

使用特权

评论回复
36
highgear| | 2011-10-22 20:45 | 只看该作者
老刘,怎么又改口了?不是奇偶,也不是死锁,变成饥饿了?别告诉我们15楼你老刘打错字了。

我不会与你老刘去争论什么“饥饿”,什么死锁,你老刘的目的无非是想用无聊的口水争论来遮掩自己的怯懦,不料又暴露了老刘自己弱智. 借用 “LED数码管动态扫描”里大侠的一个帖子:

c+++发表于 2010-11-2 10:08 | 只看该作者 回复 引用 评分 报告 返回版面 TOP  得分:0
44楼: 41楼:
highgear,xwj等各位:
不必再多说了。
   
我早说过刘钱贝不懂技术, 你们这些聪明人怎么想去试图说服一个连一幅画都要请人挂,还美其名曰站在巨人肩膀上的白痴呢?
         ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P

使用特权

评论回复
37
stuotuo| | 2011-10-25 21:29 | 只看该作者
瞄瞄

使用特权

评论回复
38
刘前辈|  楼主 | 2011-10-28 09:57 | 只看该作者

死锁就是饥饿。

本帖最后由 刘前辈 于 2011-10-28 11:34 编辑
38楼highgear
    老刘,怎么又改口了?不是奇偶,也不是死锁,变成饥饿了?别告诉我们15楼你老刘打错字了。


唉,和这种OS文盲交流还真费劲。——也不转转脑子?死锁和饥饿是同一概念;死锁是饥饿的特例。(看好书再来。)——5个就餐者同时拿起一把叉子,死锁5小时吃不上饭,饿不饿?

            听清楚了,我话不说两遍:“无论就餐人数是奇数 / 偶数都可能造成死锁;——这个问题老刘和highgear 观点一致,毋庸多言(别没完没了地扯,除了死锁还知道点别的啥?)关键是下面:

就餐人数若配置为为偶数,除了死锁,还会产生饥饿问题;配置为奇数,防止了饥饿情况的发生。……”

下面以OS 教本内容引用为证:







呵呵,OS文盲仅仅知道一点特例--死锁(最简单的情况),就卖弄半天;——还有通例那,同时存在,同样属性的问题,什么改口不改口——无知还要装出懂的样子。










、、

使用特权

评论回复
39
hotpower| | 2011-10-29 04:10 | 只看该作者
晕,hotisp 2.80A早就反汇编出来了。

至少有8.88成被反。大家自己反。

使用特权

评论回复
40
刘前辈|  楼主 | 2011-10-29 08:47 | 只看该作者
大叔反汇编出来下面这句是什么意思:51汇编代码是什么样的?

      up ( & s[ i ] );




、、

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则