簡體   English   中英

在紅寶石MRI中分配是原子操作嗎?

[英]Is assignment an atomic operation in ruby MRI?

假設我在課堂上有這兩種方法。

def set_val(val)
  @val = val
end

def get_val
  @val
end

我將產生多個線程以不同的值調用set_val 是否保證從@val讀取返回正確的值,即不是最后分配的值,而是傳遞給set_val的值? 閱讀時我能得到一些奇怪的東西嗎? 分配操作是原子的嗎? 與線程數無關,它是不可分割的嗎?

這在某種程度上取決於您使用的Ruby實現。 對於MRI Ruby(“默認” Ruby)而言,這是一種安全的操作(原子操作),因為它具有全局解釋器鎖,可以保護某些操作,例如分配操作不會被上下文切換中斷。

JRuby還保證某些操作是線程安全的,包括分配給實例變量。

無論如何,請確保考慮到任何此類並發訪問都可以看似隨機的方式進行序列化。 也就是說,除非使用顯式鎖(例如Mutex),否則不能保證哪個線程首先分配,哪個線程最后分配。

暫無
暫無

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

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