zoukankan      html  css  js  c++  java
  • 过桥问题及一些想法

             周三上操作系统课的时候,被要求现场写一段过独木桥问题的代码。原题是这样的:

    有一座南北向独木桥,如果桥上有一个人,则同向的人可以上桥并通过,反向的人只能等待。要求用信号量描述其过程。

    我当时在课堂上犯傻,并不会用wait和signal原语那些来描述,而是用了其他描述方式。其实题目也不算难,是我自己二了。反省了一下,觉得我这段时间来纠结的一个问题算是有个答案了。

    我比较早之前就有个问题:既然这么多东西都能在百度谷歌上找到答案,那哪些是我们应该熟悉的?

    这里说下自己的一些想法吧。单条的语法不熟悉是正常的,比如input框里一个placeholder属性,只需要知道有这玩意的存在,但自己可能因为太久没写html而忘了怎么写其实是挺正常的。 但对于一段关系极为密切的代码,个人觉得是要记下来的(尤其是基础性的)。就像上面那道题一样,看似只是不熟悉用它的一些语法描述,感觉百度一下就好,但其实这个更多的反映出一种对它背后的思维的不熟悉。就比如我当时那样,自己的思维还是停留在Python这些代码怎么写才不会发生逻辑错误的层面,而没有进到OS里具体怎样执行较底层的操作(如wait原语)才不会出错的深度。

    所以现在对于白板编程,我是非常支持的。个人认为在没有IDE和百度/谷歌下,直接白板编程,其实是很能考验个人思维的。有bugs不是问题,但代码的层次、为方便调试写的检查输出和代表的操作(比如可能因考虑到并发而写的一些看着多余的操作)这些,很好的反映了个人的编程习惯和对相关内容的认识程度。关于这个,有篇好文章顺便分享一下http://www.ituring.com.cn/article/199031  题目也不一定非得是数据结构这方面的内容啊

    那么接下来呢,我打算把PPT里的内容再自己整理一遍,基础部分的代码抄一遍直接记到能默出来为止(反正代码不长,个人而言耗时也不多)。

    最后,附上课堂上老师给的答案(这个老师还是很好很用心的,上了大学后,专业相关的课里就她教的最好了) ——

    var mutex, smutex, nmutex: semaphore := 1, 1, 1;  定义变量

    sCount, nCount: interget := 0;

    Procedure SouthPassenger; // 南桥头行人进程                    Procedure NorthPassenger;

    begin                                                                        begin

    wait(smutex);                                                            wait(nmutex);

    if sCount = 0 then wait(mutex); //得到过桥权                    if nCount = 0 then wait(mutex);

    sCount := sCount + 1;                                                 nCount := nCount + 1;

    signal(smutex);                                                          signal(nmutex);

    向北,过桥…                                                                向南,过桥…

    wait(smutex);                                                            wait(nmutex);

    sCount := sCount – 1;                                                 nCount := nCount – 1;

    if sCount = 0 then signal(mutex); //释放过桥权                  if nCount = 0 then signal(mutex);

    signal(smutex);                                                          signal(nmutex);

    end;                                                                         end;

  • 相关阅读:
    实现对象属性的lazy-loading(延迟加载)
    Scikit-Learn机器学习入门
    实现后门程序以及相应的rootkits,实现对后门程序的隐藏
    关于iptables命令
    基于netfilter和LVM的密码窃取
    实验一:网络嗅探器
    实验二:ICMP重定向攻击
    第八节课、第九节
    第六、七课
    python读取excel文件
  • 原文地址:https://www.cnblogs.com/awalker/p/4887545.html
Copyright © 2011-2022 走看看