标题:[讨论]c#+SQL并发问题
取消只看楼主
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
结帖率:33.33%
 问题点数:0 回复次数:1 
[讨论]c#+SQL并发问题

各位大大:
在做C/S时,怎么处理并发问题的?

假如下载剩下一张票 从杭州到上海, 有5个售票窗口都显示了这张票的信息,同时决定购买
这个时候大家都调用购买的命令,使用数据库事务来提交, 但只有一个用户的购买是成功的
另外4个用户购买都是失败的,只要提示他们票已经被别人购买。

有下面三中并发控制策略可供选择:

Ø 什么都不做 –如果并发用户修改的是同一条记录,让最后提交的结果生效(默认的行为)

Ø 开放式并发(Optimistic Concurrency) - 假定并发冲突只是偶尔发生,绝大多数的时候并不会出现; 那么,当发生一个冲突时,仅仅简单的告知用户,他所作的更改不能保存,因为别的用户已经修改了同一条记录

Ø 保守式并发(Pessimistic Concurrency) – 假定并发冲突经常发生,并且用户不能容忍被告知自己的修改不能保存是由于别人的并发行为;那么,当一个用户开始编辑一条记录,锁定该记录,从而防止其他用户编辑或删除该记录,直到他完成并提交自己的更改


我搜了一下,有的说增加一个标识字段,如果有用户对其修改就把该字段做上标记,其它用户只能浏览了。
但是有个弊端:如果第一个进行修改的客户掉线(标记尚未解除),那么其他用户再不能修改了,出现死锁。
还有的用事务.....

搜索更多相关主题的帖子: SQL 杭州 上海 数据库 开放式 
2007-01-30 14:07
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
得分:0 

CSDN转过来:
买票这种问题我想各位高手为了避免冲突,实现起来应该有各种解决方案。
但是我觉得买票应该满足人的需要,做到公平合理。
比如说现在只有一张票:
第一种情况:
锁定
A售票员已经查询出来了,正在询问顾客A买不买。
这时候,B售票员的系统就会显示没有车票了。B售票员会告诉顾客B没有票了。
然而,当A顾客说不买这张票的时候,B顾客还被告知没有票了,这样B顾客就没有
买到车票。产生了对B顾客的不公平。
第二种情况:
不锁定
A售票员已经查询出来了,正在询问顾客A买不买。
这时候,B售票员也在询问顾客B买不买这张票。
然而,当A说买这张票的时候,售票员B的动作快,已经给这张卖出去了。但是顾客A是比顾客B
先来的,这样就产生了对顾客A的不公平。

我觉得要做到公平,就应该兼顾到顾客。
当售票员A查询出票的信息时,锁定这一纪录,并且设定一个标志位。告知这票正在卖出中。
售票员B查询的时候,票据信息自动实时更新,不断显示票据信息,并且告知顾客等待。
如果顾客A不买这张票了。状态为改变,这样就可以告诉B顾客还有票,并且询问买不买。
这样就能达到一点公平合理性了。


2007-01-30 14:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-118850-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047233 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved