如何在不释放Lisp的情况下获取读写锁?

时间:2014-04-16 07:52:24

标签: multithreading lisp ccl readwritelock

我使用Clozure CL编写应用程序。在应用程序中,我需要编写几个文件,因此我为每个文件进行了读写锁定。

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

  1. 抓取所有文件read-write-locks
  2. 退出CCL
  3. 我读了Clozure CL document,但找不到像抓写一样的函数。我只能找到"抓住"," with-read-lock"和" with-write-lock"。 '抓握锁定'不会在读写锁定上工作,另外两个会自动释放锁定。那么如何获取所有文件读写锁(不释放它们)并退出应用程序?

1 个答案:

答案 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)是否是方式在您自己的代码中执行此操作,但它肯定是一种方式。