有这么一个场景,1个售票处共有100张票,一共有10个乘客每个乘客一次只能买1-6张票,并且每次买完票后会对售票处进行一个减票操作(比如当前售票处有100张,一个乘客买了5张,然后售票处现在是95) ,这里每个乘客看做一个线程,100张票是共享资源,最后运行的结果是剩余68张 卖出35张(这里不考虑加锁问题)
我的疑惑是 最多卖出去60张,即便买票方法不加锁,线程之间来回切换,也不应该出现剩余票数时68 而卖出35

有这么一个场景,1个售票处共有100张票,一共有10个乘客每个乘客一次只能买1-6张票,并且每次买完票后会对售票处进行一个减票操作(比如当前售票处有100张,一个乘客买了5张,然后售票处现在是95) ,这里每个乘客看做一个线程,100张票是共享资源,最后运行的结果是剩余68张 卖出35张(这里不考虑加锁问题)
我的疑惑是 最多卖出去60张,即便买票方法不加锁,线程之间来回切换,也不应该出现剩余票数时68 而卖出35

举个例子, 两个线程(乘客)并发读取到了剩余票100张(共享资源),一个消费了1张,一个消费了2张,那么这两个线程(乘客)买完票后,剩余票不是 99 就是 98,此时两个线程(乘客)其中一个是不是漏算了, 就会出现你上面的超卖现象(卖出+剩余数 大于了原始数据)