首先了解金鱼有一个“特点”:它会一直吃,一直吃,直到撑死为止。
这吃货真的会连命都不要硬是要吃死自己么?这个暂且不论其真实性,这样认为就好了。另外,爱国下,金鱼起源于中国哦。
假设李雷和韩梅梅两个人合住一套公寓,共同养了一条金鱼。金鱼一天喂也只能喂一次,不然鱼就撑死了;当然如果谁也不喂,鱼就饿死了。所以李雷和韩梅梅约定
1. 每天喂鱼一次,且仅一次
2. 如果李雷喂了,韩梅梅就不喂了,反之亦然
3. 如果今天李雷没有喂,韩梅梅今天就必须喂,反之依然
场景1
起初李雷和韩梅梅都还不沟通。每个人觉得需要喂鱼时,查看一下鱼的状态,感觉鱼还没进过食,则喂鱼。就这样,金鱼经常就死了。
症结
感觉常常出现问题。往往鱼还没吃食,他们觉得鱼吃了,然后鱼就饿死了;玩玩鱼吃了,他们觉得鱼没吃,然后鱼就撑死了。
改进
李雷和韩梅梅平常多观察,通过查看鱼的外形就能很准确的判断鱼是否喂过。
场景2
岁月悠悠,鱼儿悠悠。因为他们能很准确的判断鱼是否喂过。直到有一天,他们发现鱼还是撑死了。怎么回事呢?
李雷判断完鱼没喂后,然后去了趟厕所,花了5分钟。此间韩梅梅判断鱼没喂,给喂了鱼。李雷回来后,然后喂鱼,鱼不幸胀死了。
症结
存在代码竞争,两个人不能同时进入临界区
改进
任何时刻只能有一个人在临界区里,即互斥。当李雷判断鱼有没有喂后,去厕所的时候,不允许韩梅梅喂鱼。那韩梅梅怎么知道李雷是不是在厕所里呢?
场景3
韩梅梅和李雷沟通是最直接的方法,另外就是:留纸条