WithLock

WithLock[File["path"],expr]

锁定文件 path,计算 expr,然后释放文件.

WithLock[LocalSymbol["name"],expr]

锁定本地符号 name,计算 expr,然后释放本地符号.

WithLock[var,expr]

锁定共享变量 var,计算 expr,然后释放共享变量.

更多信息和选项

范例

打开所有单元关闭所有单元

基本范例  (2)

准备通过多个并发进程访问文件:

使用同一目录中的锁定文件保护并发访问:

使用多个并行进程尝试同时写入同一个文件:

数据已写入(以不确定的顺序),进程之间互不干扰:

通过向其中写入 0 来初始化文件:

同时读取文件并写入新的值:

所有访问实际上被序列化了:

未受保护的并发访问可能会覆盖彼此的值,甚至读取部分内容:

范围  (3)

文件锁定  (1)

使用锁定文件来序列化并发更新操作:

LocalSymbol 锁定  (1)

用本地符号作为锁:

共享变量锁定  (1)

在并行计算中用共享符号作为锁:

最后对文件进行写入的进程获胜;以前的值被完全覆盖:

选项  (3)

ExpirationDate  (1)

可为锁设置过期日期,以防止锁定过程无法释放锁:

未释放的锁定带有识别信息:

一旦过期,下一个使用它的 WithLock 将打破锁定:

PersistenceTime  (1)

可为锁设置过期日期,以防止锁定过程无法释放锁:

未释放的锁定带有识别信息:

一旦过期,下一个使用它的 WithLock 将打破锁定:

TimeConstraint  (1)

如果锁已被使用,WithLock 将永远等待,需要将其终止:

给定有限的等待时间,将限制等待锁定被释放所花费的时间:

属性和关系  (2)

WithLock 中使用共享变量相当于 CriticalSection

本地符号上的更新操作会自动受到并发保护:

可能存在的问题  (4)

如果作为锁的文件已经存在,锁定将被挂起:

下面的计算在被终止之前不会返回结果:

始终使用不存在的文件作为锁:

如果用作锁的本地符号已有值,则锁定将被挂起:

下面的计算在被终止之前不会返回结果:

始终使用不存在的本地符号作为锁:

并非所有文件系统都支持本地符号锁定所需的操作:

更多情况下是支持文件锁定的:

在本地和一台远程计算机上启动并行内核:

在本地文件系统上创建的文件和锁定文件可能在远程计算机上不可用:

在所有并行子内核上同时对 file 进行写入:

只有本地内核的结果出现在文件中:

远程计算机的结果已写入对该计算机而言的本地文件中:

在共享文件系统上使用文件并锁定文件:

在所有并行子内核上同时对 file 进行写入:

现在,所有结果都写入同一个文件中:

Wolfram Research (2021),WithLock,Wolfram 语言函数,https://reference.wolfram.com/language/ref/WithLock.html.

文本

Wolfram Research (2021),WithLock,Wolfram 语言函数,https://reference.wolfram.com/language/ref/WithLock.html.

CMS

Wolfram 语言. 2021. "WithLock." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/WithLock.html.

APA

Wolfram 语言. (2021). WithLock. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/WithLock.html 年

BibTeX

@misc{reference.wolfram_2024_withlock, author="Wolfram Research", title="{WithLock}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/WithLock.html}", note=[Accessed: 18-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_withlock, organization={Wolfram Research}, title={WithLock}, year={2021}, url={https://reference.wolfram.com/language/ref/WithLock.html}, note=[Accessed: 18-November-2024 ]}