當作者實現序列化程序的互斥體部分時,他們使用名爲cell
的列表。但是這個列表只包含一個元素,爲什麼不使用一個變量呢?SICP 3.4中的互斥體的實現
5
A
回答
10
因爲變量不是您可以傳遞給另一個函數的第一類值。在3.4中,作者實現了使用clear!
作爲輔助函數的make-mutex
函數,該函數使用一個單元格。如果單元格由可變變量表示,那麼clear!
必須在make-mutex!
內定義,以關閉該變量。幫助功能test-and-set!
也是如此。
他們也可以使用,比如一個盒子而不是一個cons cell。
5
如果使用變量而不是列表,則程序clear!
和test-and-set!
將不起作用,因爲Scheme是按值傳遞的。
相關問題
- 1. 在Java中實現互斥體
- 2. 在node.js中實現互斥體
- 3. 實現互斥鎖?
- 4. 的實施「使串」在SICP第3.4節
- 5. 是在用戶空間中實現的C++ 11互斥體嗎?
- 6. 在互斥體實現中的死鎖和競態條件
- 7. Silverlight中的互斥體
- 8. Win32中的互斥體
- 9. 爲什麼互斥體不需要互斥體(並且該互斥體需要互斥體...)
- 10. 互斥體實現是否可以互換(獨立於線程實現)
- 11. 針對Windows的Boost互斥實現
- 12. 在windows phone中實現互斥芒果
- 13. 在用戶級線程庫中實現互斥體
- 14. 使用原子變量在Java中實現互斥體
- 15. pthreads互斥體實現中是否存在基本錯誤?
- 16. 與smp的Java互斥體
- 17. Node.js和互斥體
- 18. Ruby和互斥體
- 19. EventQueues和互斥體
- 20. 互斥體機制
- 21. Java中互斥線程的互斥量?
- 22. 如何用kthread實現線程互斥?
- 23. .NET如何實現互斥鎖?
- 24. 實現互斥確保有界等待
- 25. 提升interprocess互斥體vs提升線程互斥體
- 26. 使用Allegro互斥體創建互斥體類
- 27. 在運行時選擇互斥體或虛擬互斥體
- 28. 互斥或不互斥互斥?
- 29. 尋找一些類似互斥體的USB接入的互斥體機制
- 30. Ruby中的子進程和互斥體