Kiedy autorzy implementują część serializerów mutex, używają listy o nazwie cell
. Ale lista zawiera tylko jeden element, więc dlaczego nie wystarczy użyć zmiennej?Implementacja muteksu w SICP, sekcja 3.4,
5
A
Odpowiedz
10
Ponieważ zmienna nie jest wartością pierwszej klasy, którą można przekazać do innej funkcji. W wersji 3.4 autorzy implementują funkcję make-mutex
, która używa clear!
jako funkcji pomocniczej, która pobiera komórkę. Jeśli komórka była reprezentowana przez zmienną zmienną, wówczas clear!
musiałaby być zdefiniowana wewnątrz make-mutex!
, aby zamknąć tę zmienną. To samo dotyczy funkcji pomocnika test-and-set!
.
Mogli również użyć, powiedzmy, pudełka zamiast komórki.
5
Jeśli zamiast listy używana jest zmienna, procedury clear!
i test-and-set!
nie będą działać, ponieważ Schemat jest wartością przekaż.