12306 车票候补可能死锁吗

2019-09-29 13:54:37 +08:00
 loveiset

两个人,互相候补了对方的票,结果到最后两个人都没候补成功,更多人同理,有没这样的可能

2715 次点击
所在节点    问与答
13 条回复
tanranran
2019-09-29 15:15:29 +08:00
候补有一个排名(按照支付时间)啊,除非你俩都是同一名次。
pkookp8
2019-09-29 15:25:14 +08:00
照道理,是可能的
a 认为我有 B 票,希望有 A 票,B 有点绕路,A 直达
b 认为我有 A 票,希望拿到 B 票,A 有点绕,B 直达
a 候补不到 A 就不退 B,b 拿不到 B 就不退 A


但人数很多,只要有一个退票了就可以解锁,只剩一对死锁
一对死锁的条件还挺苛刻的,ab 方人数得一致。供小于求的时候这个问题不是问题,宁愿绕路。供大于求的时候问题也不是问题,不会出现很多人都在等对方解锁
0DBBFF
2019-09-29 15:25:17 +08:00
不是很懂候补对方的票,都有票为什么还会候补。不同车直接退票就释放了,候补就能拿到,怎么死锁?
pkookp8
2019-09-29 15:28:34 +08:00
想了下,还是不可能
初始条件是 a 先买 B,b 先买 A
总有一方买的时候另一辆车是有空位的,除非是自己的选择,之后又换了
SFGarfield
2019-09-29 15:35:56 +08:00
一个按照订单维度的先进先出的队列就可以搞定了。另外 12306 也有行程冲突的检查。
yukiww233
2019-09-29 15:41:02 +08:00
这不是死锁啊,人为退票就已经释放资源了
across
2019-09-29 15:48:05 +08:00
你说的群众拿在手上的资源,你不退票票务都不知道可用,靠票务无解。
另外同一个行车时间重叠我记得是没法进行多张订票的。如果你一定要订到票后再退票,那肯定死锁,不过基数够大,而且退的越晚亏得越多,死锁可能性很低吧。
HuasLeung
2019-09-29 15:48:12 +08:00
候补都是排队的,毫秒之差也是顺序。一乘客在某个时间段内的某个行程只能拥有一张票(否则行程冲突),要获取他人的票就必须先释放,不是死锁
wildcat007
2019-09-29 15:54:47 +08:00
我之前购买了:8 点 30 出发的车(举例)
后来我候补了:9 点 30 和 10 点出发的车
从最开始的候补几十人,过了几天一直显示我候补排队第二名~不知道什么鬼
感觉是和 [如果人在某个时间段在火车上,那么就不能继续购票] 的原则冲突了
不知道是不是影响后面候补排名 3 以及以后的人购票了
lukaz
2019-09-29 16:12:31 +08:00
人为导致的死锁是可能的,两个人都各自先买了票,然后又想换成对方的票,并且在候补成功前不进行退票操作。假设此时没有其他退票出现,那么这两个候补请求就出现“人为死锁”了。
至于说行程时间检查,候补的票可以是错开时间的啊,比如一个人想提前出发,另外一个人想延后出发。
009694
2019-09-29 16:21:16 +08:00
这种应该不能叫死锁吧。。感觉叫困境更合适。 实际上更类似于先交钱还是先交货的矛盾
loveiset
2019-09-29 17:52:56 +08:00
@0DBBFF 比如我现在有 26 号的票,候补了 27 号的,票难买啊,只能等候补到了 27 的再把 26 的退掉;
另一个人想法一样,不过他已经买到了 27 号的,候补的是 26 号的,感觉有这种可能,是不是如果前面一直排名是 1,都在等对方退,然后都没等到~
zzugyl
2019-09-30 09:27:05 +08:00
如果 12306 做的比较强大,检测到这种情况,直接兑换,是否可行?
目前我觉得不会死锁,候补有个截止兑现时间,估计你说的死锁在这一刻可以按订单顺序放开,订单顺序中排在后面一个拿到票。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX