回答
在Erlang中執行狀態的單位不是一個線程,而是一個進程。是的,這是一個在線程之上實現的輕量級進程;但它更像是一個過程而不是一個線程。
重點是進程不共享狀態,它們傳遞消息;而線程默認分享一切,並且必須進行仲裁以避免混亂。
因此,您不需要線程安全,因爲您不使用線程。
聲明:我幾乎不知道Erlang。用一粒鹽給我看。
純粹功能語言(顯然)只允許「純」功能。維基說,純粹的功能總是線程安全的,從而證實了我對這個話題的直覺。
但我不知道Erlang是否是純粹的功能(wiki暗示否則,所以我猜這不是)。也許它使用其他方式來實現線程安全。無論如何,它的數據結構(大多是?獨佔的?)是不可變的,因此它本質上是線程安全的。作爲一種功能性語言,至少慣用的Erlang代碼不會使用(muc?any?)全局變量,而是使用純函數。這些是線程安全的。但事情I/O可能仍然是一個問題......如果一個Erlang程序同時讀取和寫入文件,這樣的代碼不可能不是線程安全的。但大多數情況下,由於不可變的數據結構等原因,你會好起來的。
哈維爾是對的。
但是,我想添加一些它之前吸引我的東西。如果您正在使用內置驅動程序或nif,它可能不再是線程安全的。這似乎很明顯,因爲驅動程序或nif將使用C或C++代碼,但值得一提的是。所以你不能僅僅因爲使用Erlang而完全忽略線程安全。
否參見Erlang Style Actors Are All About Locking。在功能語言中實現線程安全性要容易得多,但您需要考慮它。
我剛開始學習線程安全性。這讓我的代碼更加防守,可能太防守。
請注意,在這種情況下,您很可能仍然錯誤。共享一切併發是非常非常難以得到正確的除了最微不足道的例子。
不,您仍然需要考慮Erlang中的線程安全性,但問題要簡單得多。
我讀了an article,其中作者指出您的消息API可能導致線程問題。這個例子圍繞着一個銀行賬戶。他的初始消息API具有GET和SET操作。一些想要存入$ 100的代碼會獲取當前值,並將其加100,然後設置結果。當然,這隻有在單個進程訪問銀行賬戶時纔有效。一旦兩個過程操縱平衡,所有投注都關閉。他的解決方案是將消息API更改爲DEPOSIT和WITHDRAW(他實際上使用了一條消息 - 更新 - 但你明白了)。這會導致交互採用原子語義 - 監聽過程一次只能處理一次存款或提款,並會阻止其他請求,直到第一次完成。
值得注意的是,這個問題與共享內存問題基本相同。 (如果我們使用GET和SET消息與進程交互,我們基本上創建了一些共享內存)。另一位博主compares ets to shared memory也是如此。然而,只要你明白你已經引入了共享內存結構,並規定了對共享內存的訪問權限,你就不應該有任何線程問題(當然,除了死鎖之外)。
- 1. Erlang JInterface - 是OtpMBox線程安全的嗎?
- 2. 我可以在Realm的線程中使用忽略屬性嗎?
- 3. 我可以忽略全局.gitignore嗎?
- 4. java線程安全:線程安全嗎?
- 5. 忽略xcuserdata安全嗎?
- 6. 在Python線程安全嗎?
- 7. 線程安全策略
- 8. 我可以使用ContextBoundObject創建線程安全對象嗎?
- 9. 線程安全編程
- 10. 單線程實現線程安全嗎?
- 11. Java線程getId()線程安全嗎?
- 12. CFStringTransform線程安全且可重入嗎?
- 13. 以下實現線程安全嗎?
- 14. 可以.ptvs被安全地忽略git嗎?
- 15. 'gnu-zero-variadic-macro-arguments`可以安全地忽略嗎?
- 16. 我不在線程安全?
- 17. 我的收藏線程安全嗎?
- 18. 我的IBackingStore需要線程安全嗎?
- 19. Java:我的方法線程安全嗎?
- 20. 在ScalaTest中使用SBT時,可以安全地忽略ScalaCheck/Specs警告嗎?
- 21. Spring mongoTemplate線程安全嗎?
- 22. Lparallel.queue線程安全嗎?
- 23. BoxClient線程安全嗎?
- 24. EventHubClient.SendBatchAsync - 線程安全嗎?
- 25. .NET:JsonMediaTypeFormatter線程安全嗎?
- 26. multiset equal_range線程安全嗎?
- 27. pip線程安全嗎?
- 28. com.google.cloud.datastore.Datastore線程安全嗎?
- 29. WNetGetResourceInformation線程安全嗎?
- 30. qsort線程安全嗎?
+1完全正確 – 2010-08-19 17:10:55
但你確實需要「過程安全」:) – 2010-08-20 07:48:04