CriticalSection[var,expr]
为并行计算获取锁定 var,计算 expr,然后解开锁定 var.
CriticalSection[{var1,var2,…},expr]
同时锁定所有变量 vari.
CriticalSection
CriticalSection[var,expr]
为并行计算获取锁定 var,计算 expr,然后解开锁定 var.
CriticalSection[{var1,var2,…},expr]
同时锁定所有变量 vari.
更多信息
- 最多允许一个具有相同锁定变量的临界区在任何并行内核上同时运行.
- 用于锁定的变量在主内核中不应有值.
- WithLock[var,expr] 等价于 CriticalSection[var,expr].
范例
打开所有单元 关闭所有单元基本范例 (1)
范围 (2)
ParallelTable[CriticalSection[{locks[Mod[i, 2]]}, i], {i, 10}]Clear[locks];size = 10; bins = ConstantArray[0, size];
SetSharedVariable[bins]ParallelDo[
With[{i = RandomInteger[{1, size - 1}]}, CriticalSection[{locks[i], locks[i + 1]}, bins[[i]]++;bins[[i + 1]]--]], {100}];
binsTotal[%]应用 (1)
n = 0;SetSharedVariable[n]ParallelEvaluate[n = n + 1]n使用 CriticalSection 使整个代码段不可分割(atomic):
n = 0;SetSharedVariable[n];Clear[nlock]ParallelEvaluate[CriticalSection[nlock, n = n + 1]]n属性和关系 (3)
Monitor[ParallelEvaluate[CriticalSection[lock, Pause[0.5];$KernelID]], lock]mlist = {};
include[e_] := (mlist = Union[mlist, {e}];)
SetSharedFunction[include]ParallelDo[include[RandomInteger[10]], {10}]mlistslist = {};SetSharedVariable[slist];
Clear[lock]ParallelDo[e = RandomInteger[10];CriticalSection[lock, slist = Union[slist, {e}]], {10}]slistWithLock 与 CriticalSection 处理符号的方式相同:
SetSharedVariable[xs];xs = 0;
ParallelDo[WithLock[xslock, xs = xs + 1], {10}];
xs可能存在的问题 (1)
巧妙范例 (1)
rp := Pause[RandomReal[4]];PrintTemporary[Dynamic[Array[forks, $KernelCount]]];
Clear[forks];forks[_] := Null;
With[{nf = $KernelCount},
ParallelTable[
With[{i1 = i, i2 = Mod[i + 1, nf, 1]},
Do[Print[i, " thinking"];rp;Print[i, " hungry"];
CriticalSection[{forks[i1], forks[i2]}, Print[i, " eating"];rp],
{2}]],
{i, nf}]];相关指南
-
▪
- 并行计算中的资源共享 ▪
- 并行计算 ▪
- 并行性
文本
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_2026_criticalsection, author="Wolfram Research", title="{CriticalSection}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/CriticalSection.html}", note=[Accessed: 09-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_criticalsection, organization={Wolfram Research}, title={CriticalSection}, year={2020}, url={https://reference.wolfram.com/language/ref/CriticalSection.html}, note=[Accessed: 09-September-2026]}