[英]Clojure STM ambiguity factor
在Clojure中,我們使用STM進行並發。
我的問題是STM使用數據的時間點值,是不是這引入了歧義?
我們怎么知道訪問了什么價值?
Clojure中的STM提供(通過ref
和dosync
)一個事務上下文,其中所有更新都保證“同時”發生在從外部世界查看時涉及的所有引用。
目標是保持系統中價值的一致性,典型的例子是兩個銀行賬戶之間的資金轉移。 如果您從賬戶A轉賬到賬戶B的100美元,那么您將希望同時更改A和B的金額。
在此示例中,對於在事務內處理的金額讀取的值實際上沒有歧義,因為在完成事務外部的讀取時,只有以下情況是可能的:
在事務內部時,只讀(並且不修改)的ref
可以將它們的值從事務的一個點更改為另一個,這稱為寫偏斜 (參見Clojure Programming - 第4章,參考, 寫偏斜 ) 。 為了避免這種情況,您可以使用ensure
(而不是deref
),這將導致如果任何這些ref
的值發生更改(您只讀取的那些),那么將重試整個事務。
在這種情況下,Clojurians使用“時間”和“價值”這兩個詞來表達非常具體的含義,以消除這種歧義。 在這種情況下,“時間”是“序列中的時間”或划時代的時間,而不是牆上的時間。 因此, 時間描述了此標識的值序列中的哪個值 。
價值是在某個時間點身份的不變內容。 該值可以是簡單的(原始值或原子值)或復合值,並由任意結構化的不變值組成。 重要的是, 值不會改變,所以如果你想知道使用了哪個值,你可以簡單地打印或記錄它
我高度推薦這部關於價值觀,國家和身份的視頻
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.