0 关注者 · 82 帖子

初学者标签汇集了面向 InterSystems 数据平台初学者的文章和问题

新增
公告 Claire Zheng · 五月 11

如果您是 InterSystems 的新用户,欢迎访问InterSystems 开发者交流中心(Developer Hub)

您可以从这里开始使用 InterSystems 技术——安装 InterSystems IRIS,连接到它,运行一些实际的东西,或者直接在基于浏览器的交互环境中试用产品(无需设置)。

如果你想知道从哪里开始,这里有你会发现的内容:

开发者入门指南 - 介绍 InterSystems IRIS 的结构以及如何设置它

快速入门 - 简短实用的指南,帮助您从零开始进行设置

0
0 10
文章 Jeff Liu · 四月 21 4m read

尽管LOCK(docs) 是 InterSystems IRIS 的基础部分,负责并发性,但开发者社区上关于它的讨论并不多。这是可以理解的,因为它是一个稳定且相当低级的命令。在本文中,我将举一个简单的例子,说明如何使用互操作性锁。在示例中,我们将有一个本地表,其中的引用数据由两个不同的进程使用:

  • 从表中读取数据的实用功能(由生产中的各种 DTL/Rules 使用)
  • 更新表的专用业务操作

这里的问题是,当业务操作更新表时(最糟糕的情况是进行完全重建),自定义函数将无法从表中获取数据,这将导致 DTL/规则处理出现问题。

锁可以帮助我们解决这个问题。具体方法如下:

  • 实用程序将在获取数据前获得共享锁。任何数量的进程都可以持有共享锁,因此不会出现并发问题。一旦检索到数据,我们就会释放共享锁。
  • 更新器业务操作会先使用共享锁,然后再释放独占锁。一旦某个进程获得独占锁,IRIS 就会保证其他进程无法获得同一资源上的锁。这样,当独占锁被持有时,实用程序就无法获取共享锁。一旦我们的业务操作完成对表的更新,它就会释放独占锁,允许实用程序访问表。

    让我们开始吧

本地表

有点简单(在实际项目中作为 LUT 可能会更好),但我们的目的是展示锁是如何工作的,而不是构建一个复杂的表:

Class Lock.RefData Extends %Persistent
{
Property Value;
}
0
0 22