为了账号安全,请及时绑定邮箱和手机立即绑定

这个结果该如何分析呢?有两个剩余票数为2

窗口1卖了1张火车票,还剩票数:2 

窗口1卖了1张火车票,还剩票数:1 

窗口1卖了1张火车票,还剩票数:0 

窗口3卖了1张火车票,还剩票数:2 

窗口2卖了1张火车票,还剩票数:3 


 这个结果该如何分析呢?有两个剩余票数为2

正在回答

4 回答

这都是线程不安全导致的

0 回复 有任何疑惑可以回复我~

视频中 ticketsCont-- 是一个复合操作在多线程下可能交叉运行,内存可见性问题,可以学习这节课程 https://www.imooc.com/learn/352

0 回复 有任何疑惑可以回复我~

我也出现这种问题了?

0 回复 有任何疑惑可以回复我~

课程中的代码本身就没有考虑线程安全问题,解决这个问题请搜索“线程安全”,以下内容是解释你的程序运行结果(可能过程,因为多线程过程很复杂):

窗口3获得运行机会,判断此时剩余5张可以卖票,但此时被窗口2抢去了运行机会,窗口3减减得到4张余票,但是窗口1又抢得了机会,减减得到3张余票,此时3继续运行,打印出余票3,窗口1和窗口2都打印了余票2,接下来的执行就和课程的差不多了。

这里如果考虑到原子操作,就不会出现你的这种问题,而你的这种问题出现的几率很小,因为程序运行很快,分配的一点点时间片在此案例中的一个线程很容易就能执行完,就算执行不完,出现以上问题的概率也小。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这个结果该如何分析呢?有两个剩余票数为2

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信