在SICP第3.4节中实现互斥锁

Bin*_*ang 5 lisp scheme mutex sicp

当作者实现序列化程序的互斥体部分时,它们使用一个名为的列表cell.但是列表只包含一个元素,那么为什么不使用变量呢?

Asu*_*awa 10

因为变量不是可以传递给另一个函数的第一类值.在3.4中,作者实现了一个make-mutex函数,该函数clear!用作辅助函数,它接受一个单元格.如果单元格由可变变量表示,则clear!必须在内部定义make-mutex!以关闭该变量.这同样适用于该test-and-set!辅助函数.

他们也可以使用一个盒子而不是一个cons单元格.


PJ.*_*des 5

如果一个变量是用来代替名单那里,程序clear!test-and-set!将无法工作,因为方案是通过按值.