现在编写一任务系统,如别人发布一个任务,很多人会去取得这个任务,然后完成这个任务,
如下,A用户发布了一个任务,任务量是100,
Taskid     tasknum
1           100现在系统客户端有200用户在等待任务,如果此任务一发布,马上会有200个用户同时查询并取到上条任务,然后在客户端来完成获取的任务,这样就超过了任务的总量,有什么机制能避免这个问题

解决方案 »

  1.   

    增加一列取到任务的计数,UserCount,缺省值0,这样增加任务的时候自动初始化为0
    用户取任务时:
    Select * From XX表 Where tasknum>UserCount
    此时把4个字段全取下来,然后UserCount+1
    Update XX表 Set UserCount=UserCount+1 Where taskid=@taskid and tasknum>UserCount
    再判断update影响的行数,如果为0,说明被已经到达数量了,获取任务失败,如果为1则成功。
      

  2.   

    我曾经有个类似的问题,也是抢任务的,是给用户注册考试号的,在同一个时刻会有N多个人在同时进行申请,所以个人感觉1楼的方法不可行,如果是sql的话应该会有锁的,使用事务,先写执行写入,然后获取值,这样就应该能避免了