程式的原子性

2021-07-10 01:25:52 字數 824 閱讀 8720

眾所周知,原子是構成物質的基本單位(當然電子等暫且不論),所以原子的意思代表著——「不可分」;

由不可分性可知,原子性是拒絕多執行緒操作的(只有分解為多步操作,多個執行緒才能對其操作:就像乙個盒子裡有多個兵乓球,多個人能夠從盒子裡拿桌球;如果盒子只有乙個兵乓球,乙個人拿的話,其他人就拿不到了;這就是原子性,桌球就具有原子性,人就相當於原子)

簡而言之——不被執行緒排程器中斷的操作,如:

賦值或者return。比如"a = 1;"和 "return a;"這樣的操作都具有原子性

原子性不論是多核還是單核,具有原子性的量,同一時刻只能有乙個執行緒來對它進行操作!

舉個例子:

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帳戶也回到原來狀態)的操作叫原子性操作。

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

程式的原子性

a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 1.從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。2.在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在則...

什麼是程式的原子性

程式的原子性是指 整個程式中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間的環節 原子性操作 原子性在乙個操作是不可中斷的,要麼全部執行成功要麼全部執行失敗 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操...

什麼是程式的原子性

舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 1.從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。2.在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊...