开线程插数据_python笔记7-多线程之线程同步(锁lock)
生活随笔
收集整理的這篇文章主要介紹了
开线程插数据_python笔记7-多线程之线程同步(锁lock)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言丨
關于吃火鍋的場景,小伙伴并不陌生,前面幾章筆記里面我都有提到,今天我們吃火鍋的場景:
吃火鍋的時候a同學往鍋里下魚丸,b同學同時去吃掉魚丸,有可能會導致吃到生的魚丸。
為了避免這種情況,在下魚丸的過程中,先鎖定操作,讓吃火鍋的小伙伴停一會,等魚丸熟了再開吃,那么python如何模擬這種場景呢?
首先需要明確幾個概念:
概念
- 多個線程幾乎在同時修改某一共享數據時,需要進行同步控制
- 線程同步能夠保證多個線程安全訪問競爭資源,最簡單的同步機制就是引入互斥鎖
- 互斥鎖保證每次只有一個線程能夠進程寫操作,從而保證數據的準確性
- threading模塊定義了lock類來進行鎖操作
lock類
- Lock():創建鎖
- acquire([blocking]): 進入同步狀態,如果blocking為True,則當前線程會阻塞,直到獲取鎖,False則不會阻塞。默認為True。
- release():釋放鎖
未鎖定
1、如果多個線程同時操作某個數據,會出現不可預料的結果。
比如以下場景:當小伙伴a在往火鍋里面添加魚丸的時候,小伙伴b在同時吃掉魚丸,這很有可能導致剛下鍋的魚丸被夾出來了(沒有熟),或者還沒下鍋,就去夾魚丸(夾不到)。
2.運行結果:
線程同步(鎖lock)
1.為了避免以上這種情況發生,就引入鎖的概念,鎖有兩種狀態:鎖定和未鎖定
2.每當一個線程a要訪問共享數據時,必須先獲得鎖定;如果已經有別的線程b獲得鎖定了,那么就讓線程a暫停,也就是同步阻塞;等到線程b訪問完畢,釋放鎖以后,再讓線程a繼續。
3.用threading.Lock()這個類里面的兩個方法
- acquire() 鎖住
- release() 釋放鎖
4.運行結果:
以上是python筆記7全部內容,如果覺得對你有幫助,就點擊“收藏”吧!
如果還有疑問的地方,歡迎評論留言給我們~
總結
以上是生活随笔為你收集整理的开线程插数据_python笔记7-多线程之线程同步(锁lock)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你的火线时刻无法永久保存你的火线时刻无法
- 下一篇: redis session java获取