簡體   English   中英

為什么多線程有一個Lock對象?

[英]Why does multithreading have a Lock object?

我的理解是, 線程實際上一次只允許一個線程處於活動狀態,並在線程之間連續切換。 當進行IO綁定操作時,工作負載可以有效地轉移到其他地方(PI,數據庫等)時,這很有用。

如果是這樣, 為什么需要Lock()對象? 沒有風險兩個線程同時訪問一個變量(在多處理中可能是這樣),因此在這種情況下我看不到鎖的實際用法。

沒有風險兩個線程同時訪問一個變量

它取決於用於實現多線程的調度程序。 無論當前線程做什么,上下文切換都可能在任何中斷上發生。 因此,可以在時鍾中斷時中斷訪問變量的線程,並且可以激活訪問同一變量的另一個線程。

首先,鎖定安全的整個區域,考慮更新文件:

with lock:
    with open("some_file", "r+") as f:
        do_something(f)

甚至單項操作

a['b'] += 1

可能導致多種操作(讀取a['b'] ,遞增,寫入a['b'] ),並且需要通過鎖來保護:

with lock:
    a['b'] += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM