有以下版本的讀者和作者問題:多個讀者和作者,2個或更多的讀者可以同時讀,如果一個作者寫作沒有人可以讀或寫,所有作者都有相同的寫作機會(例如,在100輪中,每個作家應該寫出20次左右的作品)。使用STM在Clojure中實現這一點的正確方法是什麼?我不是在尋找一個完整的代碼,只是一些大方向。在Clojure中使用STM的讀者和作者
4
A
回答
3
Clojure的STM的給你比這更好的保證。作家們彼此等待,但讀者在寫作者寫作時仍然可以閱讀;它只是看到最近的一致狀態。如果一個作家還沒有完成寫作,讀者根本看不到它的變化。
4
Clojure的內置STM不能真正包含您正在尋找的所有約束條件,因爲讀者永遠不會等待作家並且您的要求需要讀者等待。
,如果你能原諒不堵的讀者,那麼你可以繼續
(. (java.lang.Thread. #(dosync (write stuff)) start))
(. (java.lang.Thread. #(dosync (read stuff)) start))
,如果你需要讀者來阻止,那麼你將需要一個不同的STM,世界上有很多,其中
0
正如其他答案中提到的,讀者在閱讀時不會阻止,並且您希望讀者阻止,那麼您可能將它們實現爲「writer」,它在其回調函數中寫入相同的值。我知道這是很奇怪的解決方案,但可能會幫助你解決問題,或者給你一些進一步的指導。
相關問題
- 1. STM和改變clojure
- 2. Clojure生產者消費者
- 3. Clojure的參與者
- 4. 備註ACL讀取器級別和讀者/作者字段
- 5. 在Clojure中STM的併發性
- 6. 解決使用Java信號量的讀者/作者
- 7. 顯示作者在Wordpress作者檔案中使用的類別
- 8. MySQL的讀者使用C#
- 9. 使用wordpress列出作者和作者的電子郵件或
- 10. 讀者 - 作者同步問題
- 11. 讀者作者併發問題Java
- 12. 讀者/作者和派生類的解耦持久
- 13. 針對讀者偏好的讀者 - 作者實現解決方案
- 14. Clojure STM模糊因子
- 15. C分段錯誤 - 讀者和寫作者
- 16. C - 讀者/作者(併發):分叉和信號量輸出
- 17. 如何使用phpexcel讀者
- 18. 使用JSON隱讀者
- 19. YAML和Jinja2的讀者
- 20. Clojure中的生產者消費者隊列
- 21. 的InputStream讀者
- 22. 緩衝讀者不工作
- 23. 如何VTK爲JPEG讀者和DICOM讀者
- 24. 正確使用ReentrantReadWriteLock時,從寫入者到讀者的信號?
- 25. 在Wordpress中獲取作者的作用
- 26. 作者列表作者
- 27. 讀者 - Sharepoint的貢獻者差異
- 28. 這兩個修改和ref-set更新Clojure中的STM樹?
- 29. 如何在讀者作者解決方案中導致作者優先權失敗?
- 30. 讀者作者問題:每次獲得不同的輸出