我正在使用Clozure CL编写一个应用程序。在应用程序中,我需要写几个文件,所以我为每个文件设置了读写锁定。
现在我正在尝试编写一个退出函数。它检查是否所有的文件写入都已完成,然后退出。基本上它的工作原理如下:
- 抓取所有文件读写锁定
- 退出CCL
我阅读了Clozure CL文档,但找不到任何像抓写锁这样的函数。我只能找到"抓取锁定"、"带读取锁定"one_answers"带写入锁定"grap-lock对读写锁不起作用,其他两个会自动释放锁。那么,我如何获取所有的文件读写锁定(而不是释放它们)并退出应用程序呢?
我不太熟悉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
)在您自己的代码中是否是一种好的方式,但它肯定是一种的方式。