php 线程锁,如何使用python线程锁(实例解析)
在這篇文章之中我們來了解一下什么是python線程鎖。了解一下python線程鎖的相關知識,以及線程鎖在python編程之中能起到什么樣的作用。
線程鎖(互斥鎖Mutex)
一個進程下可以啟動多個線程,多個線程共享父進程的內存空間,也就意味著每個線程可以訪問同一份數據,此時,如果2個線程同時要修改同一份數據,會出現什么狀況?
鎖的使用:
創建鎖
mutex = threading.Lock()
鎖定
mutex.acquire([timeout])
釋放
mutex.release()import time
import threading
def addNum():
global num #在每個線程中都獲取這個全局變量
print('--get num:',num )
time.sleep(1)
num -=1 #對此公共變量進行-1操作
num = 100 #設定一個共享變量
thread_list = []
for i in range(100):
t = threading.Thread(target=addNum)
t.start()
thread_list.append(t)
for t in thread_list: #等待所有線程執行完畢
t.join()
print('final num:', num )
正常來講,這個num結果應該是0, 但在python 2.7上多運行幾次,會發現,最后打印出來的num結果不總是0,為什么每次運行的結果不一樣呢? 哈,很簡單,假設你有A,B兩個線程,此時都 要對num 進行減1操作, 由于2個線程是并發同時運行的,所以2個線程很有可能同時拿走了num=100這個初始變量交給cpu去運算,當A線程去處完的結果是99,但此時B線程運算完的結果也是99,兩個線程同時CPU運算的結果再賦值給num變量后,結果就都是99。那怎么辦呢? 很簡單,每個線程在要修改公共數據時,為了避免自己在還沒改完的時候別人也來修改此數據,可以給這個數據加一把鎖, 這樣其它線程想修改此數據時就必須等待你修改完畢并把鎖釋放掉后才能再訪問此數據。
注:不要在3.x上運行,不知為什么,3.x上的結果總是正確的,可能是自動加了鎖
以上就是本篇文章所講述的所有內容,這篇文章主要介紹了python互斥鎖的相關知識,希望你能借助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有所幫助,讓你學習python更加輕松。
更多相關知識,請訪問php中文網Python教程欄目。
總結
以上是生活随笔為你收集整理的php 线程锁,如何使用python线程锁(实例解析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php数字加零,php实现数字补零的两种
- 下一篇: php api数据,php API查询