互斥鎖:
當多個執行緒幾乎同時修改某乙個共享的資料時,需要進行同步操作,引入互斥鎖
當乙個執行緒更改資料的時候,先將它鎖定,其他執行緒不能修改,直到執行緒操作全部完成,此時會釋放資源
互斥鎖保證了同一時刻,只有乙個執行緒能對資源進行操作,保證資料的正確性
# from threading import thread
import threading
import time
g_num = 0
def work1(num):
global g_num
for i in range(num):
#上鎖,核心**上鎖
ret=lock.acquire(true)
print(ret)
g_num +=i
lock.release()
print('work1:',g_num)
def work2(num):
global g_num
for i in range(num):
ret=lock.acquire(true)
if ret:
g_num += i
lock.release()
print('work2:',g_num)
if __name__ == '__main__':
lock=threading.lock()
first_thread=threading.thread(target=work1,args=(10,))
second_thread=threading.thread(target=work2,args=(10,))
first_thread.start()
# first_thread.join()
time.sleep(0.9)
second_thread.start()
(該**中加入乙個延時,執行可以結果更加清晰一點)
lock=threading.lock
lock.acquire()鎖定
lock.release()釋放
死鎖:多個執行緒互相等待對方的鎖,互相佔同一資源不放,避免死鎖,超時釋放。
生產者與消費者模組:
生產者:生產資料
消費者:消費資料
佇列:先進先出
棧:先進後出
程序狀態:新建態、就緒態、終止態、執行態、阻塞態
多程序之間的資源共享問題
多程序之間不再共享全域性變數
程序池佇列:
1.import queue
2.from multiprocessing import manager,pool
3.form multiprocessing import queue
程序與執行緒對比:
1.執行緒是程序中的乙個例項,真正在執行的是執行緒
2.程序只是資源分配的基本單位,執行緒是排程的基本單位
3.沒有程序就沒有執行緒這個概念
4.不同的程序一起執行,其中乙個程序死亡,其他程序不受任何影響
5.在同乙個程序內,如果執行緒消亡,那這個程序就會受到影響,所以從健壯性來說,程序比執行緒更加穩定
6.執行緒共享全域性變數,程序建立自程序相當於貼上複製,此時相當於建立了乙份副本,不共享全域性變數
程序鎖(互斥鎖)(Python)
3 搶票示例 import json import time from multiprocessing import process,lock defsearch i with open ticket encoding utf 8 as f ticket json.load f print s 當前...
多程序中的程序鎖(互斥鎖)
以下例項中 import threading lock threading.lock num 0def work1 asd global num for i in range asd num 1print 在當前的執行緒修改過後的num是 num defwork2 asd global num fo...
Windows程序間互斥鎖
windows的互斥鎖mutex是可以在程序間使用的。createmutex時可以指定乙個mutex名稱,此名稱可以被其他程序或執行緒使用。createmutex的第二個引數bool binitialowner表示在建立後是不是立刻獲取此鎖,相當於立即waitforsingleobject。open...