恋爱中的那些程序原理

328 2021-04-26 09:09

关于锁、异步和阻塞的一些故事(老村长喜欢讲故事)

有一对男女,他们不是青梅竹马,不是情窦初开,不是一见钟情,然后约定,如果40岁以后,一个没嫁、一个没娶,就结婚。

但是这俩人有个奇怪的诅咒,就是如果不是和对方结婚了,就必须每两年分一次手。而他们恋爱的时间分别是,今年和明年。结果,可想而知。男的分手的时候,女的在恋爱中,女的分手时男的在恋爱中。于是40岁之后,一个没嫁、一个没娶,但是恋爱都没谈上过。

怎么避免这么悲催的事情呢?如果你在等待你的队友和你一起玩游戏。但是你又嫉妒他在和别的小姐姐打游戏,你就开了一局,结果,好死不死,当他退出来发现你在和别的小哥哥打游戏地时候他也开了一局,于是你俩一晚上就没有在一起玩,长此以往。国将不国。。。

怎么避免这么悲催的事情呢?男生或者女生之一,特别痴情,是同步模式,她的眼里只容得下一人,除非这个人死了,算了还是别太狠,除非看到这个男生和别人结婚了,否则就一直等着他。那么,上述的情况就解决了。她在结束了自己的恋爱、自己的游戏之后,等着这个男生。这个男生发现了嘿嘿竟然还有人等我,好感动呀,于是一起开始了结婚游戏。。。game over。

实际上里面蕴含着的不仅仅是同步(对请求方自身而言需要等待对非自身资源的使用之后才能继续自身的其他动作)、还有阻塞(对资源提供方而言,会影响下一个请求提出需求)。这个女生。不光等了。而且自己所有的时间都牺牲了。这在一个人的生命中是需要付出很大代价的。那么如果她利用这些时间去丰富自己的业余生活,其实也不耽误她获得幸福地结局。她选择给男生的疗养地留一封信,说我这辈子就等你了。然后她就吃喝玩乐等着男生结束恋情伤心的时候看见信去找她。

这封信叫做回调函数。有了回调,那么男生就变成了观察者模式中的被观察者。主动巡视变成了被动接受事件。大大节约了女生的cpu中断分片。让她可以不耽误自己的宝贵青春韶华。

接下来处理一个很复杂的情形。女生除了吃喝玩乐,还想接受爱情的滋润。也就是说,她不想在一颗树上吊死。但是她这辈子全世界非常喜欢一棵歪脖树。如果这棵树愿意,她就希望挂在他的东南枝上。那可怎么办?

首先这就是一个异步的过程,异步一般都是非阻塞的。成年人的世界,就是我全都要。但是有时候对方不这么想。对方就很单纯。受不了朝三暮四。那么如何对付海王男女呢?或者说对于海王男女,忠贞的一方如何识别呢?这里有一个CAS(Compare and swap),即比较并交换,也是实现我们平时所说的自旋锁或乐观锁的核心操作。男生要去和女生扯证了。要先看女生户口本上是不是已婚。男生非常优秀,优秀上天了。三年五载回来一趟。第一次订婚、第二次结婚。订婚的时候女生户口本上是未婚、结婚的时候女生户口本上是未婚。男生结婚了,之后才知道女生在这3年当中结了10次婚。男生痛哭流涕悔不当初。咋办。现在都现代化、自动化、信息化、数字化了。户口本有电子记录,每次更改婚姻状况都有版本号。男生去查看版本号。订婚时候和结婚时候女方版本号没有变过。男生心里很高兴。吃点儿好的,很有必要。男生心理问题解决了,女生和歪脖树过起了没羞没臊的幸福生活。

恋爱同居当中还有非常现实的问题。搞不好就容易被气死。男生要先洗漱,再吃饭,女生要先吃饭,再化妆。地图中,厨房在左、厕所在右,中间有连通的们。男生女生只能从一个方向进去,另一个方向出来,中间不能回头。必须做完自己的两件事才能出来。也就是说两方都是阻塞的。于是你会看到,男生洗漱的时候,看到厨房里有人,推不开门。女生吃饭的时候看到厕所里有人,推不开门。双方一个无法上厕所、一个无法吃饭。

解决上述问题可以破坏环路等待条件即资源有序分配法(高级点的是银行家算法)。超时放弃法。

全部评论

·