day28 互鎖lock 模擬搶票

2021-09-29 15:30:46 字數 1897 閱讀 4880

lock (互斥鎖)

** 模擬搶票**

子程序1

: 讀取票數,更新票數

子程序2

: 搶票方法(1

) 讀取資料的實際票數(2

)判斷票數(如果大於0

,搶票成功,票數-=1)

(3)更新資料庫(4

)否則else等於0

,搶票失敗

子程序3:1

.查詢票數(呼叫子程序1的r票數方式)

2.上鎖: 遇到require上鎖之後,程序變成同步

3.搶票

4.解鎖

主程序: p.start(

) 啟動

import json
1.讀取票數,更新票數

def

wr_info

(sign,dic=

none):

if sign ==

"r":

with

open

("ticket"

,mode=

"r",encoding=

"utf-8"

)as fp:

dic = json.load(fp)

return dic

elif sign ==

"w":

with

open

("ticket"

,mode=

"w",encoding=

"utf-8"

)as fp:

json.dump(dic,fp)

2.搶票的方法

def

get_ticket

(person)

: dic = wr_info(

"r")

# 讀取資料庫當中的實際票數

# print(dic)

# time.sleep(0.1) 為了防止資料錯亂,造成報錯,如果加鎖了,這句話可以刪掉;

if dic[

"count"

]>0:

print

("%s搶票成功"

%(person)

) dic[

"count"]-=

1 wr_info(

"w",dic)

# 更新資料庫

else

:print

("%s搶票失敗"

%(person)

)

3.用ticket來進行函式的統一呼叫

def

ticket

(person,lock):

dic = wr_info(

"r")

# 查詢票數

print

("%s 查詢票數 : %s "

%(person,dic[

"count"])

) lock.acquire(

)# 遇到了acquire上鎖之後,程序之間變成同步

get_ticket(person)

# 開始搶票

lock.release(

)

if __name__ ==

"__main__"

: lock = lock(

)for i in

range(10

):p = process(target=ticket,args=

("person%s"

%(i)

,lock)

) p.start(

)

前端學習Day28

一 補充 1.js中的三大特殊資料 undefined,null,nan nan 非法的數值運算得到的結果 特殊之處 1.是乙個數值型的資料,但是不是乙個數字 2.nan不等於任何值,和任何資料都不相等,nan不等於nan 檢測方法 isnan 要檢測的資料 true 檢測結果為 nan 或能轉成 ...

day28 什麼是變數

第28節 什麼是變數 變數是什麼?在程式的程序中需要儲存一些資料。大家之前學彙編的時候知道了,儲存資料可以存到cpu中也就是存在暫存器裡也可以存在記憶體中。但是在c語言中儲存資料的時候我們要把這個資料儲存到 呢?在c語言裡所為的變數就是乙個容器,也就是一塊記憶體。1 宣告變數 變數型別 變數名 變數...

程序課堂小結day28

粘包問題 無法確認傳送資料的大小。短時間內傳送多次資料量小並且間隔時間短的資料會一次性打包傳送。struct 可以將乙個很長的資料,壓縮成固定的長度,比如4.解決粘包問題 通過struct模組弄乙個報頭。可以把字典壓縮成乙個報頭,傳送給服務端。服務端接收到報頭後解壓縮,獲取真實字典資料長度。接收字典...