2012-12-13 78 views
3

我見過這個操作符被使用了很多,我甚至每次使用它都會改變。所有的酷寶石都有這種和平的代碼。但是使用這個操作符時線程的安全性呢?Ruby || =操作員線程安全

+1

它本質上不是線程安全的,比x = x ||更安全。 y';也就是說,它不是*線程安全的。 (可能會有一些基於特定實現的輕微警告,但它涉及一個讀寫對,**不保證原子性*或*可見性**。) – 2012-12-13 05:15:38

回答

1

與其他任務一樣,如果沒有互斥鎖,它也不是真正的線程安全的。它可能看起來是線程安全的,取決於系統中的核心數量,它可能是ish。我注意到4線程/ 8線程系統比2線程/ 2線程系統有更多的線程問題,所以如果你有權訪問其中的一個線程,可以使用它來確保你已經得到你想要的任何解決方案。

寫鎖定可能是凌亂的業務,但它是您爲生活在多線程世界中而付出的代價。

+1

不要拆解 - 線程安全的ish ==不安全的。 – dbenhur

+0

@Tadman - 你確定這是不是一個安全的操作在MRI中歸功於GIL? – pguardiario

+0

這實際上取決於字節碼是如何生成和解釋的。像其他語言的'+ ='或甚至'++'一樣,它被實現爲加載,測試和存儲。如果這兩者之間有中斷的機會,那麼它不是沒有鎖的線程安全。 – tadman