如何在不释放Lisp的情况下抓住读写锁?

怀斯·辛普森(Wise Simpson)

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

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

  1. 抓取所有文件读写锁
  2. 退出覆铜板

我阅读了Clozure CL文档,但是找不到任何功能,例如grab-write-lock。我只能找到“抓锁”,“读锁”和“写锁”。'grab-lock'不适用于读写锁,另外两个将自动释放锁。那么,如何获取所有文件的读写锁(不释放它们)并退出应用程序?

约书亚·泰勒(Joshua Taylor)

我对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是否在您自己的代码中执行此操作方法,但肯定执行此操作的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不破坏列表的情况下释放指针?

Oboe C ++线程-如何在不阻塞的情况下读写队列

如何在不设置777权限的情况下使apache读写用户目录

如何在不传输数据的情况下通过select for update获得DB2的锁?

如何在不释放鼠标键的情况下更改所选文本

Perl:如何在不访问Perl变量的情况下释放为标量分配的内存?

如何在不释放元素的情况下从 unordered_set 中删除元素

是否可以在不释放行锁的情况下提交事务并开始新的事务?

在不释放C ++ 11中的第一个锁的情况下将读取锁升级为写入锁?

Fabric.js-如何在不释放鼠标键的情况下取消选择对象并选择组

如何在不影响Master的情况下将Postgres 9.3 Slave转换为读写

如何在不以root用户身份运行的情况下读写装载的卷?

如何在不使用高级库的情况下读写Raspberry Pi 4上的GPIO引脚?

如何在不更改变量的情况下递归

如何在不丢失数据的情况下安装Ubuntu?

如何在不抛弃const的情况下实现strstr()?

如何在不递归的情况下进行ls

如何在不触发订阅的情况下更改queryParams?

如何在不覆盖文件的情况下多次保存

如何在不阻塞输入的情况下使用getline?

如何在不写select的情况下进行分组

如何在不阻止的情况下从终端运行命令?

如何在不互相重叠的情况下分散div

如何在不阅读〜/ .profile的情况下运行sh?

如何在不丑陋的情况下删除评论?

如何在不登录的情况下保护Web服务

如何在不登录的情况下编辑.bashrc

如何在不键入“退出”的情况下退出屏幕?

如何在不确认的情况下强制cp覆盖