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

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

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:11:22 | 显示全部楼层
哩个应该系并发线程问题 同时有5个人抢红包就会甘 之前民航都试过一张机票卖比2个人拉3 R- y) G: i) o8 F! q
哩个系数据库既并发锁问题。。。。厄 撤远了, d. Z: k: x$ u4 }
我估计会系甘既原因, y. Y7 g  ]+ O

& c& o3 V* R4 t3 k       开始2 {5 @( v! ?) H7 z
    a申请红包                                       开始
( I6 I% K; T" X# h) @# o4 }检查剩余红包数大于1                      b申请红包  7 H7 B/ Z3 V6 n" I$ D8 X( g
产生随机星梦写入个人账户     检查剩余红包数大于1 ' M1 k+ D1 M( v+ Y  y# E. o
    剩余红包数-1                产生随机星梦写入个人账户( B! Z7 \$ a5 ^6 Z4 x/ P
          完成                                 剩余红包数-1+ P' B% j9 E& u/ a' _
                                                       完成! Y0 Z7 U  t9 U5 y2 v( |
                                                   
: U2 t6 d& K" Z$ H7 ]. m" u6 z* |$ _+ n: I3 `% z, R
以上同一行代表同时产生既事件 睇明就知道点解星梦会负数。。。。虽然服务器处理既事件可能号短 不过哩个空档确实存在 就可能会产生红包数系负数,解决表面问题既方法系加个check约束比红包剩余数必须大于等于0,不过仍然多拿 不过显示上再冇问题,真正解决方法 系将成个过程做成存储过程,然后运行存储过程之前加锁。。。。。。
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-12 10:17:29 | 显示全部楼层
本帖最后由 victorsengmo 于 2010-8-12 10:20 编辑 - X* F+ |% J! _( Z, e, I" W5 p
哩个应该系并发线程问题 同时有5个人抢红包就会甘 之前民航都试过一张机票卖比2个人拉9 m& L6 @$ M, l
哩个系数据库既并发 ...  e+ w% Z  v  g5 O- b1 q
157972678 发表于 2010-8-12 10:11
4 p" Y8 o' u8 v/ X+ D0 W
. i' c/ V: v% A) p6 F: z1 Y
大概要加返個check lock吧~~* }; L  Z( s4 D* j8 R% b' b
1 R$ V$ w# R2 w( v0 |9 c2 i
if [ lock == 0] then{5 B! ~) V: l6 V+ z  D
   ....
6 \, O* m% a# W/ u}else{( n& ?- ~5 U0 ~2 A1 A
   ....7 i, i& v6 C; x" O  g
}
% b' Q# f* Y- _! u* j; ?" E, I5 ?7 d0 b; ]% p9 T/ S' b6 w
太多年無寫程式了~~
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:36:00 | 显示全部楼层
大概要加返個check lock吧~~
! \6 z8 ]1 i5 D9 L2 s$ f0 `1 ]
1 U7 q3 m% {9 @9 rif [ lock == 0] then{6 n' D0 h! s, c- p  v# N1 X
   ....
7 v% O8 O6 w+ N0 n. Q}else{# D* J! Z; h" c: T% a/ z
   ....2 `- q. b) `5 r: m/ Z) g! u- {
}5 H/ K) h, `1 b

9 i6 G' b; E' `1 r太多年無寫程 ...! d1 [5 H. {* P) K* k( L
victorsengmo 发表于 2010-8-12 10:17 AM

6 `+ m3 Q" k4 O% S
. f8 x. g) B; y( D7 y8 V# U7 |/ |4 T7 {- H: I; a) h$ n
    5关程序事2 b+ ]* R& U2 Y/ v* n6 D
拿红包主要3个步骤$ P' h: M( t. J! Q( y1 K
检查剩余红包数,红包金额加入账户,剩余红包数减1: _) D+ {) d$ S) ^, }  `
就系剩余红包数减1之前有另外一个用户申请红包,结果就会甘 程序系冇办法检查既 只可以靠数据库加锁
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:40:44 | 显示全部楼层
本帖最后由 157972678 于 2010-8-12 10:45 编辑 , z7 y* E1 ?0 H3 g  n% d
大概要加返個check lock吧~~/ D: F/ x" v3 r) r- o$ o

& }+ _' V8 a3 G6 |: I. Gif [ lock == 0] then{, d7 V5 m# C8 o' ^. N
   ....! Z. u2 e, I, ^. {; C% q
}else{
* T! h( c: c* K* a   ....: x" f* Y$ p2 f# _- J3 P) t
}
3 R  w; v0 Q8 O( e
0 O0 ]: W& A5 }$ ^- g* r3 A" O8 P3 d太多年無寫程 ...
: `. |4 H9 t1 B4 K  w8 x0 L# L+ Mvictorsengmo 发表于 2010-8-12 10:17 AM

' j* W1 y  @; ?( _- O
- J& o& }4 G6 M) Z" Q5 O% ^# ?8 [9 Q! \, l
    你哩个lock 数值 系每个用户页面打开既进程都5同,数据不共享,你打算点确定个lock系0定系1呢。。。。5 |, I& O8 c) {# A/ N3 d" @, C
除非好似jsp甘用全局变量,不过网页代码要大改了。。。。5现实。。。。。。。。
; D  N9 Z/ L5 q4 S" m! n2 Y% Mand 如果判定是否够用既话lock用boolbean数据类型就得了 用数值只会减慢运算速度. l7 k- ?9 b7 b' ?
当然前提你5系认为个lock系读取剩余红包数然后写入既数值。。。。。如果系既话 个lock加左等于冇加
) x2 r2 Y$ h8 J5 R
/ W' @7 {. F& I6 N$ p6 M( ]3 ?
( E- D$ F, {0 a* U# _" V      开始                                                                                                       剩余1红包( u  a0 t- V1 E! o
    a申请红包                                       开始
7 F. B- T0 _, U2 Q3 @, v8 M检查剩余红包数大于1                      b申请红包                                             a发现可以申请$ K: l, U0 k# P( c8 m) v8 T6 W5 }
产生随机星梦写入个人账户     检查剩余红包数大于1                                    a获得星梦               红包数未减b发现可申请4 N6 N+ Z8 h  H) D
    剩余红包数-1                产生随机星梦写入个人账户                               红包剩余0                 b获得星梦
6 |# t- S4 Y! k$ Z) F2 m. v          完成                                 剩余红包数-1                                                                          红包剩余-11 j/ D5 z) D8 L5 U
                                                       完成
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-12 10:46:51 | 显示全部楼层
你哩个lock 数值 系每个用户页面打开既进程都5同,数据不共享,你打算点确定个lock系0定系1呢。。 ...) [. z& K" Z' `, y, l1 V5 h
157972678 发表于 2010-8-12 10:40

7 m0 M1 r- ~* S7 H) x/ l1 p
: e# z6 G4 Q" ]9 ~; t有道理有道理~~看來我退步了很多...哈哈.....
. ^/ ?. T1 P# z- @3 ?: X% d
" u! k! N- @" Q. `& E% W; ?寫程式只係大學果時寫過~出到尼做野巳經無寫了~
回复 支持 反对

使用道具 举报

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 | 显示全部楼层
同一个世界,同一个梦想,同一个时刻,同一声祝福!) X2 R& \4 d! C% G
洪王 发表于 2010-8-17 15:22
& b* t7 d! ^6 _2 V- i/ z1 a& M* x
( g5 c' C" ?! I2 K
....離晒題wor老兄....
回复 支持 反对

使用道具 举报

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

本版积分规则

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