CriticalSection

CriticalSection[var,expr]

为并行计算获取锁定 var,计算 expr,然后解开锁定 var.

CriticalSection[{var1,var2,},expr]

同时锁定所有变量 vari.

更多信息

  • 最多允许一个具有相同锁定变量的临界区在任何并行内核上同时运行.
  • 用于锁定的变量在主内核中不应有值.
  • WithLock[var,expr] 等价于 CriticalSection[var,expr].

范例

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

基本范例  (1)

保护代码块不受其它线程的干扰:

如果不对进入更新代码的途径加以保护,子内核可能会覆盖结果:

范围  (2)

锁定变量的形式可以是 sym[index]:

使用两个索引锁定变量来保护更新操作的源索引和目标索引:

应用  (1)

单独的读写操作不是线程安全的:

使用 CriticalSection 使整个代码段不可分割(atomic):

属性和关系  (3)

通过将内核的 ID 写入锁定变量来获得锁:

共享函数可用于临界区的同步化:

使用共享变量和临界区效率较低:

WithLockCriticalSection 处理符号的方式相同:

可能存在的问题  (1)

锁定变量在其被用于一个临界区之前不能有值:

当锁定变量确实有一个值时出现的死锁可以通过中止来打破:

巧妙范例  (1)

进餐的哲学家问题,无死锁:

Wolfram Research (2008),CriticalSection,Wolfram 语言函数,https://reference.wolfram.com/language/ref/CriticalSection.html (更新于 2020 年).

文本

Wolfram Research (2008),CriticalSection,Wolfram 语言函数,https://reference.wolfram.com/language/ref/CriticalSection.html (更新于 2020 年).

CMS

Wolfram 语言. 2008. "CriticalSection." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/CriticalSection.html.

APA

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

BibTeX

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

BibLaTeX

@online{reference.wolfram_2024_criticalsection, organization={Wolfram Research}, title={CriticalSection}, year={2020}, url={https://reference.wolfram.com/language/ref/CriticalSection.html}, note=[Accessed: 22-November-2024 ]}