[新手问题] 點解紅包會負數?

victorsengmo 发布于2010-8-12 00:25 3643 次浏览 26 位用户参与讨论   [复制分享主题]
kc123kc 发表于 2010-8-12 09:51:36 | 显示全部楼层
连续几次都系拿1星梦嘅路过...
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:11:22 | 显示全部楼层
哩个应该系并发线程问题 同时有5个人抢红包就会甘 之前民航都试过一张机票卖比2个人拉! \6 n: Y$ l) b7 u. U. `1 G
哩个系数据库既并发锁问题。。。。厄 撤远了: k- K3 H+ B- T' s% }# c% q, b- X9 j
我估计会系甘既原因
/ ?- o+ P# `! @, r) E
6 J) ]: p! h1 S, d1 T       开始  H* t, E8 Q; _  R1 n
    a申请红包                                       开始
- q% t& H) s3 |$ N5 o检查剩余红包数大于1                      b申请红包  
0 p, c. u4 q: c3 d产生随机星梦写入个人账户     检查剩余红包数大于1 ) O6 H) I8 s+ g4 G7 F; m* Q# L
    剩余红包数-1                产生随机星梦写入个人账户
1 v* ?: f' x3 d/ v! q2 A          完成                                 剩余红包数-1$ v% v% h0 Q4 I; h$ Q3 I
                                                       完成
8 W) f/ A: o# @* }7 b; L3 A6 o$ d4 h                                                    ( D- Y/ P/ ~0 B1 T" {
% ]; O, m8 }' n- A, v" ?6 h4 |
以上同一行代表同时产生既事件 睇明就知道点解星梦会负数。。。。虽然服务器处理既事件可能号短 不过哩个空档确实存在 就可能会产生红包数系负数,解决表面问题既方法系加个check约束比红包剩余数必须大于等于0,不过仍然多拿 不过显示上再冇问题,真正解决方法 系将成个过程做成存储过程,然后运行存储过程之前加锁。。。。。。
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-12 10:17:29 | 显示全部楼层
本帖最后由 victorsengmo 于 2010-8-12 10:20 编辑 " z: ]- O8 m* L' o* v
哩个应该系并发线程问题 同时有5个人抢红包就会甘 之前民航都试过一张机票卖比2个人拉
1 p# J8 m7 N* u1 v4 T; R哩个系数据库既并发 ...
8 _2 R  _; b( z1 ~  Z8 {/ @: `157972678 发表于 2010-8-12 10:11

" b( W6 q% _! v$ `1 z, ]: Q! D& V6 c: S& z$ Y
大概要加返個check lock吧~~" k8 v" K4 o5 ~: a

0 h2 w0 U8 |. u7 C) oif [ lock == 0] then{# G  s& k( b9 U& b
   ....
) O0 d/ ]  Y; C8 V  e}else{
9 U% n8 z$ N/ K# J- p- d   ....3 |4 b2 O& b3 D  B- V0 i& q
}
1 K5 Y, }1 f, M# W! y/ N& W
% @, B" @; ^3 }: f太多年無寫程式了~~
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:36:00 | 显示全部楼层
大概要加返個check lock吧~~
/ }+ W; z8 {( Z4 f+ `1 \9 B" R
3 T+ ^, }6 w) {# [; mif [ lock == 0] then{: a- O" F  D3 b0 j& k+ Q
   ....( p; V2 ^, E, U4 ?. A
}else{0 g  V2 s" h  B- \6 m
   ....
' e7 ]9 s+ O8 G0 @- g' `1 {4 K7 u+ m}
4 |+ k4 U* w' m( I5 [' ?0 Q4 U' e' a% h: Y# N: E7 r+ k
太多年無寫程 ...$ x" ?8 B; V! p1 i! y
victorsengmo 发表于 2010-8-12 10:17 AM

$ g. h/ Y  Z' ~9 V3 u2 W
/ I: j9 c" s$ G
& V0 J" i+ Y, C6 J) n" M8 d: Y0 \    5关程序事
! @8 J) V) @- E: e, [拿红包主要3个步骤" @: L" _% {, |
检查剩余红包数,红包金额加入账户,剩余红包数减1% C! N5 x) `7 k* @8 o1 b( j
就系剩余红包数减1之前有另外一个用户申请红包,结果就会甘 程序系冇办法检查既 只可以靠数据库加锁
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:40:44 | 显示全部楼层
本帖最后由 157972678 于 2010-8-12 10:45 编辑 9 J- Z" B: a3 c/ T2 p2 g8 K
大概要加返個check lock吧~~
3 T' m, M% i; H7 i2 u: Y
2 a5 |9 n, N0 h+ s+ l6 sif [ lock == 0] then{
* b- q; t7 G6 l+ j6 `9 t   ....
- Q, E2 d3 R. E/ Q1 Q" M$ W}else{
' o: h7 @% p2 w( a   ....
! T' ^2 Z% n( i}
4 l, D8 ~- S! {4 B6 H( d2 K$ V/ s
太多年無寫程 ...
. E9 \( U3 {* Q# G5 `victorsengmo 发表于 2010-8-12 10:17 AM
( I. c  F  Z2 Z4 V2 z8 w! ~/ r1 P

, E& R  e# b  |0 y' F% D2 F% L" Y% x7 \/ H) S- \' Q
    你哩个lock 数值 系每个用户页面打开既进程都5同,数据不共享,你打算点确定个lock系0定系1呢。。。。5 E1 {; X7 g8 ~- T4 U7 q- }
除非好似jsp甘用全局变量,不过网页代码要大改了。。。。5现实。。。。。。。。4 v) o# m9 J4 }1 L- P2 `3 \
and 如果判定是否够用既话lock用boolbean数据类型就得了 用数值只会减慢运算速度
' X  U+ k  C0 |5 t当然前提你5系认为个lock系读取剩余红包数然后写入既数值。。。。。如果系既话 个lock加左等于冇加  S$ ]+ C& Q0 u8 a/ N4 x0 m5 Y6 P
$ a. X& @1 t; w  I6 d
8 `1 K8 |* ?( c; d! |& u8 C' [' x2 d
      开始                                                                                                       剩余1红包
3 b3 a3 `4 c8 A) [% Q    a申请红包                                       开始, f8 I' L5 J! U
检查剩余红包数大于1                      b申请红包                                             a发现可以申请
; f! T% G: ?- i8 s( Y! f产生随机星梦写入个人账户     检查剩余红包数大于1                                    a获得星梦               红包数未减b发现可申请0 l& \1 d8 b+ X* G# ^5 D4 j5 Y
    剩余红包数-1                产生随机星梦写入个人账户                               红包剩余0                 b获得星梦1 m. c0 W1 K) ~' w8 [6 {
          完成                                 剩余红包数-1                                                                          红包剩余-1& N3 M# k# u% {' F/ J4 j/ P% c
                                                       完成
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-12 10:46:51 | 显示全部楼层
你哩个lock 数值 系每个用户页面打开既进程都5同,数据不共享,你打算点确定个lock系0定系1呢。。 ...$ M3 }% x: ^7 t( |7 _# ]
157972678 发表于 2010-8-12 10:40
' f2 {5 I0 u0 i! Z- ]

/ Y7 X, i9 h- o; j' \有道理有道理~~看來我退步了很多...哈哈.....
' g; B* @; Z6 _0 P8 f
  I# ^1 c# Q: r寫程式只係大學果時寫過~出到尼做野巳經無寫了~
回复 支持 反对

使用道具 举报

Kiver 发表于 2010-8-12 11:07:00 | 显示全部楼层
原来有一伙程序高手在~~~受教了~~~
回复 支持 反对

使用道具 举报

lesswind 发表于 2010-8-14 15:30:52 | 显示全部楼层
唔係wor~我成日都攞到個wor~
回复 支持 反对

使用道具 举报

洪王 发表于 2010-8-17 15:21:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

洪王 发表于 2010-8-17 15:21:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

洪王 发表于 2010-8-17 15:22:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-17 15:25:14 | 显示全部楼层
同一个世界,同一个梦想,同一个时刻,同一声祝福!
( |2 S/ j5 N3 P/ s. H* G. {$ O洪王 发表于 2010-8-17 15:22
0 g, H( d# w  a( [, c/ q7 z" O

7 g0 d4 q; c+ n8 U8 a1 p  F2 Q ....離晒題wor老兄....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 註冊

本版积分规则

快速
回复
返回
列表
返回
顶部