各位大大:
在做C/S时,怎么处理并发问题的?
假如下载剩下一张票 从杭州到上海, 有5个售票窗口都显示了这张票的信息,同时决定购买
这个时候大家都调用购买的命令,使用数据库事务来提交, 但只有一个用户的购买是成功的
另外4个用户购买都是失败的,只要提示他们票已经被别人购买。
有下面三中并发控制策略可供选择:
Ø 什么都不做 –如果并发用户修改的是同一条记录,让最后提交的结果生效(默认的行为)
Ø 开放式并发(Optimistic Concurrency) - 假定并发冲突只是偶尔发生,绝大多数的时候并不会出现; 那么,当发生一个冲突时,仅仅简单的告知用户,他所作的更改不能保存,因为别的用户已经修改了同一条记录
Ø 保守式并发(Pessimistic Concurrency) – 假定并发冲突经常发生,并且用户不能容忍被告知自己的修改不能保存是由于别人的并发行为;那么,当一个用户开始编辑一条记录,锁定该记录,从而防止其他用户编辑或删除该记录,直到他完成并提交自己的更改
我搜了一下,有的说增加一个标识字段,如果有用户对其修改就把该字段做上标记,其它用户只能浏览了。
但是有个弊端:如果第一个进行修改的客户掉线(标记尚未解除),那么其他用户再不能修改了,出现死锁。
还有的用事务.....