目前正在做一个HIS系统,有一个功能是挂号,挂号里面有专家号,专家号是限制了一天可以挂几个号。
比如一个专家号我限制一天只能挂5个号,在挂的时候做了下校验,限号数-count(当天已挂的号)
问题来了。这样判断很容易发生并发,好几个挂号员在操作的时候可能会同时通过校验,就会多出来很多号,该如何做限制?
比如一个专家号我限制一天只能挂5个号,在挂的时候做了下校验,限号数-count(当天已挂的号)
问题来了。这样判断很容易发生并发,好几个挂号员在操作的时候可能会同时通过校验,就会多出来很多号,该如何做限制?
http://www.cnblogs.com/pengstone/archive/2012/12/23/2830238.html
set count = count - 1
where expert_id = 123 and count > 0在程序里,检查返回的更新记录数目(records affected),如果=0,表明更新没成功,就作回滚,然后你就可以说没号了
如果当天的流水号超过5,则提满额。2.在生成挂号单的读写前,通过Lock(Object)的方式,锁定读写的逻辑模块。
几个人同时挂号的时候,先把它加入到队列中去··Queue...
例如
create proc Usp_What
as
begin
开始事务
检测是否可以挂号
如果可以则挂号
如果不可以返回失败
检测已经挂号人数
如果不对则回滚事务
如果对则提交
end