互斥鎖 程序池

2021-09-19 07:30:46 字數 1636 閱讀 6526

互斥鎖:

當多個執行緒幾乎同時修改某乙個共享的資料時,需要進行同步操作,引入互斥鎖

當乙個執行緒更改資料的時候,先將它鎖定,其他執行緒不能修改,直到執行緒操作全部完成,此時會釋放資源

互斥鎖保證了同一時刻,只有乙個執行緒能對資源進行操作,保證資料的正確性

# 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...