CFLOCK多人共用資源鎖定/獨占
WEB是個多人共用的執行環境。 好處是多人多工執行緒,不會互相干擾。 缺點是同時搶資源時處理上就很傷腦筋。 什麼叫『搶資源』,白話說搶票啦,簡單說就是希望讓多人執行可以排隊做"某件事"。 假如資料庫裡面有一個表Tickets,裡面裡面有500筆資料,每一筆都是獨立票號。 當客人要來取票時,系統會找出Tickets裡面沒有被使用的票號發給客人。 所以程式碼會寫成: <cfquery name="check1" datasource="SQLDB"> Select top 1 tick_no From Tickets Where tick_used = 'N' </cfquery> <cfif check1.recordcount GT 0> <cfset newTicket = check1.tick_no> <cfquery name="update1" datasource="SQLDB"> Update Tickets Set tick_used = 'Y' , cust_id = '#LoginCust#' Where Tick_no = '#newTicket#' </cfquery> </cfif> <cftransaction action="commit" /> <cfif isdefined("newTicket")> <cfoutput>You Got Tick No : #newTicket#</cfoutput> <cfelse> <cfoutput>No More Tickets can get !</cfoutput> </cfif> 邏輯上看似沒有問題,但是請別忘記WEB是多人操作的, 結果就發生同時有2個人很湊巧的同一秒鐘按下取票, 因此上面程式碼就被兩個執行緒同時