我使用Clozure CL编写应用程序。在应用程序中,我需要编写几个文件,因此我为每个文件进行了读写锁定。
现在我试图写一个退出函数。它检查所有文件写入是否完整然后退出。基本上它的工作原理如下:
我读了Clozure CL document,但找不到像抓写一样的函数。我只能找到"抓住"," with-read-lock"和" with-write-lock"。 '抓握锁定'不会在读写锁定上工作,另外两个会自动释放锁定。那么如何获取所有文件读写锁(不释放它们)并退出应用程序?
答案 0 :(得分:1)
我并不熟悉Clozure CL的锁定机制,但我认为一些宏观扩展至少可以说明一种方法:
CL-USER> (pprint (macroexpand-1 '(with-write-lock (my-lock)
do-something)))
(CCL::WITH-LOCK-CONTEXT
(LET* ((#:G350 (MAKE-LOCK-ACQUISITION))
(#:G351 MY-LOCK))
(DECLARE (DYNAMIC-EXTENT #:G350))
(UNWIND-PROTECT
(PROGN
(CCL::WRITE-LOCK-RWLOCK #:G351 #:G350)
DO-SOMETHING)
(WHEN (CCL::LOCK-ACQUISITION.STATUS #:G350)
(CCL::UNLOCK-RWLOCK #:G351)))))
我无法说明(使用ccl::with-lock-context/ccl::write-lock-rwlock
)是否是好方式在您自己的代码中执行此操作,但它肯定是一种方式。