程式的原子性,python實現原子性,上鎖解鎖threading.Lock()

來源:互聯網
上載者:User

標籤:threading   防止   加鎖   特性   預設   python   過程   狀態   原子性   

A想要從自己的帳戶中轉1000塊錢到B的帳戶裡。那個從A開始轉帳,到轉帳結束的這一個過程,稱之為一個事務。在這個事務裡,要做如下操作:

1. 從A的帳戶中減去1000塊錢。如果A的帳戶原來有3000塊錢,現在就變成2000塊錢了。

2. 在B的帳戶裡加1000塊錢。如果B的帳戶如果原來有2000塊錢,現在則變成3000塊錢了。

如果在A的帳戶已經減去了1000塊錢的時候,忽然發生了意外,比如停電什麼的,導致轉帳事務意外終止了,而此時B的帳戶裡還沒有增加1000塊錢。那麼,我們稱這個操作失敗了,要進行復原。復原就是回到事務開始之前的狀態,也就是回到A的帳戶還沒減1000塊的狀態,B的帳戶的原來的狀態。此時A的帳戶仍然有3000塊,B的帳戶仍然有2000塊。

我們把這種要麼一起成功(A帳戶成功減少1000,同時B帳戶成功增加1000),要麼一起失敗(A帳戶回到原來狀態,B帳戶也回到原來狀態)的操作叫原子性操作。

如果把一個事務可看作是一個程式,它要麼完整的被執行,要麼完全不執行。這種特性就叫原子性

 

python中使用[互斥鎖Mutex]防止多個線程同時對一個變數修改導致的錯誤.

mutex = threading.Lock() 建立一把鎖,預設沒上鎖

mutex.acquire()上鎖

mutex.release()解鎖

 

如果一個線程執行到mutex.acquire(),如果發現鎖已經被鎖上則停止執行一直等到其他線程執行解鎖操作mutex.release()

加鎖的原則是程式碼儘可能的少

 

程式的原子性,python實現原子性,上鎖解鎖threading.Lock()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.