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

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

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:11:22 | 显示全部楼层
哩个应该系并发线程问题 同时有5个人抢红包就会甘 之前民航都试过一张机票卖比2个人拉. O1 S' N) U0 J6 n. E6 h& o8 L1 _: J
哩个系数据库既并发锁问题。。。。厄 撤远了
5 e- ]/ j" ]  o我估计会系甘既原因" z. `( e3 u) S8 k% D# C2 W  V" W
. Y2 e) @7 O4 J
       开始
$ S% c% W# Z: \# M    a申请红包                                       开始
1 b2 L# a  ?* ]. |: |1 x4 m检查剩余红包数大于1                      b申请红包  
( h& ]: r* m* o+ a7 J0 C$ T8 X产生随机星梦写入个人账户     检查剩余红包数大于1
7 n$ S1 E0 {) I3 y& n    剩余红包数-1                产生随机星梦写入个人账户
0 _8 R' m# q( M3 O6 Z5 b          完成                                 剩余红包数-1
* C0 }$ ~1 V! t                                                       完成
6 Z% G% N* M! L! i; [2 h+ T                                                   
9 B) o0 e" [. L+ R' l. j0 s5 z! z; R. b6 W
以上同一行代表同时产生既事件 睇明就知道点解星梦会负数。。。。虽然服务器处理既事件可能号短 不过哩个空档确实存在 就可能会产生红包数系负数,解决表面问题既方法系加个check约束比红包剩余数必须大于等于0,不过仍然多拿 不过显示上再冇问题,真正解决方法 系将成个过程做成存储过程,然后运行存储过程之前加锁。。。。。。
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-12 10:17:29 | 显示全部楼层
本帖最后由 victorsengmo 于 2010-8-12 10:20 编辑   ]( s$ [/ x7 o
哩个应该系并发线程问题 同时有5个人抢红包就会甘 之前民航都试过一张机票卖比2个人拉, Q* e- d/ K  Z& t0 r' C9 _
哩个系数据库既并发 ...
) ?. \" W9 i5 D157972678 发表于 2010-8-12 10:11
# _9 F& U" |- J
7 m6 w$ t( M2 w* ]
大概要加返個check lock吧~~6 G2 v- L5 X6 J) ?
1 P' I: l0 B! C3 R; I3 A% ^. s
if [ lock == 0] then{1 W2 K2 M/ X0 y( z+ o% [# ?
   ....5 {# l& p; E1 T9 G7 _+ s
}else{- b, E: i$ }6 E+ r; r
   ....+ Q' _: [& k7 g$ A' {9 A; M
}
4 i8 d+ |+ d2 g& q. G: z- V' I
$ J- l$ D  B; A, I' J+ X) L太多年無寫程式了~~
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:36:00 | 显示全部楼层
大概要加返個check lock吧~~: |8 E7 X  l/ L8 R9 P5 [
" p! e8 V6 i+ n) A
if [ lock == 0] then{$ m" y9 e0 [! S8 i
   ....6 M. w( r) g, x
}else{' \* T) f: D% I( [% K" i/ y+ U" O
   ....
/ ]  h; [! N2 i; P( A}
4 s2 ~: C* _5 l/ S8 N7 q
4 p# c! S. a. Q6 c% H8 m太多年無寫程 ...
+ m3 Z/ R! o' B6 ]- u% {( Rvictorsengmo 发表于 2010-8-12 10:17 AM

7 q; g$ C0 I6 |
+ e" t& @# |# F+ C  J2 C: I( O9 k2 Y: }9 H
    5关程序事, M. o4 P  F( l9 r! x( r6 K* i
拿红包主要3个步骤1 g+ A$ D3 w* S9 p$ F) T! c
检查剩余红包数,红包金额加入账户,剩余红包数减10 C! j. l' @' B. W# z
就系剩余红包数减1之前有另外一个用户申请红包,结果就会甘 程序系冇办法检查既 只可以靠数据库加锁
回复 支持 反对

使用道具 举报

ConvoyChan 发表于 2010-8-12 10:40:44 | 显示全部楼层
本帖最后由 157972678 于 2010-8-12 10:45 编辑
( c; J8 s8 J* a( k
大概要加返個check lock吧~~
5 Z: U# e$ K1 Y, Y
5 e. `; i# _: U& q' kif [ lock == 0] then{" f& P0 S9 G$ V
   ....( v7 |4 k! R- V. @1 k% d  L- Q
}else{, a' ~8 a0 W: p) Y7 Y4 M1 O
   ....
9 v5 Y6 y8 u) J8 x6 U; q5 C9 `}3 ^; O7 r# G9 _7 O% j& y6 ?; ]

; o: c. G+ Y' k. {5 e0 b太多年無寫程 ...4 d8 x2 Z$ G& B( ~
victorsengmo 发表于 2010-8-12 10:17 AM
! r" q; g7 r" d' o

+ C$ L6 N0 I/ x0 F( b) u
5 w, \6 G* }$ m" D: T" k6 r/ v6 S    你哩个lock 数值 系每个用户页面打开既进程都5同,数据不共享,你打算点确定个lock系0定系1呢。。。。
4 |3 ?0 W: I2 C/ [: }; I0 A# l除非好似jsp甘用全局变量,不过网页代码要大改了。。。。5现实。。。。。。。。( u# V" {, |4 j1 E
and 如果判定是否够用既话lock用boolbean数据类型就得了 用数值只会减慢运算速度/ U) b& H1 L4 v# Y7 H3 T0 Y# \2 R
当然前提你5系认为个lock系读取剩余红包数然后写入既数值。。。。。如果系既话 个lock加左等于冇加
% }* ]& Z$ @8 S9 v7 v3 N0 d1 a% L5 I

( T" l$ k; o; W# X+ A      开始                                                                                                       剩余1红包& r+ c) Z6 b: _) s  s. y' Z2 W
    a申请红包                                       开始
2 V6 u! h" f$ ]& F9 j检查剩余红包数大于1                      b申请红包                                             a发现可以申请
7 y3 D9 I, q) k6 I* [* B- u& y8 e6 L产生随机星梦写入个人账户     检查剩余红包数大于1                                    a获得星梦               红包数未减b发现可申请: v7 M" X( V3 e
    剩余红包数-1                产生随机星梦写入个人账户                               红包剩余0                 b获得星梦
; d$ k& d5 \5 k+ o7 p- ~4 `          完成                                 剩余红包数-1                                                                          红包剩余-1
9 r) @* J& ^+ v                                                       完成
回复 支持 反对

使用道具 举报

victorsengmo 发表于 2010-8-12 10:46:51 | 显示全部楼层
你哩个lock 数值 系每个用户页面打开既进程都5同,数据不共享,你打算点确定个lock系0定系1呢。。 ...
" u( ?/ [5 [; M2 [# O5 z8 ]. B; \3 m157972678 发表于 2010-8-12 10:40

% E8 i9 d/ W5 {6 ~  |, a# u4 G5 i- M0 h! s0 e6 X$ o- F) p
有道理有道理~~看來我退步了很多...哈哈.....
" A" q, t6 g- k
) ^  |! N0 @9 ^8 A, L; `9 z寫程式只係大學果時寫過~出到尼做野巳經無寫了~
回复 支持 反对

使用道具 举报

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 | 显示全部楼层
同一个世界,同一个梦想,同一个时刻,同一声祝福!
  w" E$ l; }/ n- ~洪王 发表于 2010-8-17 15:22
% X# I0 }# \1 P- A

* {' c! \& b5 I- B7 U9 m1 G1 e* R' M ....離晒題wor老兄....
回复 支持 反对

使用道具 举报

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

本版积分规则

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