#多執行緒中雖然有gil,但是還是有可能產生資料不安全,故還需加鎖
from threading import lock, thread #互斥鎖
import time
def eat1(lock):
global n
lock.acquire()
temp =n
time.sleep(0.2)
n = temp - 1
lock.release()
if __name__ == '__main__':
n = 10
t_lst =
lock = lock()
for i in range(10):
t = thread(target=eat1,args=(lock,))
t.start()
for t in t_lst: t.join()
print(n)
from threading import rlock, thread #rlock遞迴鎖
import time
noddle_lock =fork_lock =rlock() #必須這麼寫,不能分開兩行
# fork_lock = rlock()
def eat1(name):
noddle_lock.acquire()
print('%s拿到麵條了'%name)
fork_lock.acquire()
print('%s拿到叉子了'%name)
print('%s吃麵了'%name)
fork_lock.release()
noddle_lock.release()
def eat2(name):
fork_lock.acquire()
print('%s拿到叉子了'%name)
time.sleep(1)
noddle_lock.acquire()
print('%s拿到麵條了'%name)
print('%s吃麵了'%name)
noddle_lock.release()
fork_lock.release()
thread(target=eat1,args=('alex',)).start()
thread(target=eat2,args=('egon',)).start()
thread(target=eat1,args=('bossjin',)).start()
thread(target=eat2,args=('nezha',)).start()
06 併發程式設計 執行緒和鎖
什麼是執行緒 程序 資源分配單位 執行緒 cpu執行單位 實體 每乙個py檔案中就是乙個程序,乙個程序中至少有乙個執行緒 執行緒的兩種建立方式 from multiprocessing import process deff1 n print n,號執行緒 if name main t1 threa...
python 使用多執行緒進行併發程式設計 互斥鎖的使用
import threading import time python的thread模組是比較底層的模組,python的threading模組是對thread做了一些包裝的,可以更加方便的被使用 多執行緒程式的執行順序是不確定的,當執行緒被阻塞 blocked 時,執行緒掛起,阻塞結束後,執行緒進入...
併發程式設計之執行緒的讀寫鎖
1.概念 2.讀寫鎖的狀態 3.讀寫鎖特性 4.讀寫鎖的適用場景 5.主要資料型別和應用函式 6.編碼舉例 讀寫鎖實際上是一種特殊的自旋鎖,它把共享資源的訪問劃分成讀者和寫者,讀者只能擁有對共享資源的讀許可權,寫者則需要對共享資源進行寫操作。讀寫鎖並不是兩把鎖,它是乙個名字叫做讀寫鎖的鎖,可以擁有讀...