首页 > 代码库 > 牛的饮水问题

牛的饮水问题

我有十头牛,开头我只有一口只够一牛饮用的水缸,为此我的牛们经常发生打架事件。这不仅耽误时间,还会造成不必要的损失。想到这,我就多买了两个,虽然频次少了许多,但是还是有打架,还是不行,于是一不做二不休,我干脆一口气为每一头都买下了一口饮缸,这下好多了,但是还是有冲撞,存在同时争一口缸的情形。不过过了一段时间后,就好了,大家都养成了习惯,各自跑到“自己”的缸前去,于是就没再出现争饮的情形了。

客户进程与服务进程之间,存在类似的“牛饮”问题,关键在将同时发生的事件处理好。这里,将有一个“牛认缸”的问题。“同时”是进程可以判断的吗?或者说如何设计将“同时”事件判断出来呢?互掐的解决应该有个办法,最懒的办法就是指定一个时间段作为互掐变软时间,变软了,就断掉再“认缸”,如果不幸再次“互掐”就没完没了,再设聪明点,“休息时间”设为不同值,那么如何才能设为不同呢?是你的大还是我的大?谁都不想大的。于是两“牛”搞个内商量?好象也行得通,但是方法好不好?似乎看着就肾虚。抓阄是人们处理这事的常用方法,要两个随机数,各自抓一个。这办法似乎挺稳当的。但是其中有一“牛”非常地走“背”字,好不容易才绕这头,却不巧偏偏撞上了另一头,又掐起来。掐完后这牛没气了,“这有公平吗?”愤世疾俗了,只有看破红尘做和尚了。主人看着可怜,于是又寻思办法。想来想去觉得还是要讲个先来后到,于是叫客户自己存个时间,服务一看,哪位的时间靠前,就先满足谁。

好了,主人想。但愿天下牛们太平,我得睡个懒觉了。

牛的饮水问题