日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

开线程插数据_python笔记7-多线程之线程同步(锁lock)

發布時間:2023/12/4 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开线程插数据_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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。