如何在Lisp中获取读写锁而不释放它



我正在使用Clozure CL编写一个应用程序。在应用程序中,我需要写几个文件,所以我为每个文件设置了读写锁定。

现在我正在尝试编写一个退出函数。它检查是否所有的文件写入都已完成,然后退出。基本上它的工作原理如下:

  1. 抓取所有文件读写锁定
  2. 退出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)在您自己的代码中是否是一种好的方式,但它肯定是一种的方式。

相关内容

  • 没有找到相关文章

最新更新