过桥问题及一些想法

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

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

我当时在课堂上犯傻,并不会用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;

原文地址:https://www.cnblogs.com/awalker/p/4887545.html