SetSharedVariable

SetSharedVariable[s1,s2,]

声明符号 si 作为一个共享变量,它的值在所有并行内核中是同步的.

更多信息

  • 一个共享变量的唯一值可以通过主核以及每次通过主核的同步并行子核得到.
  • 没有一个值的共享变量计算得到 Null.
  • SetSharedVariable 具有属性 HoldAll.

范例

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

基本范例  (1)

xs 为一个(全局)共享变量:

每个子内核增加了(全局)共享变量的值:

如果不共享的话,每个子内核具有自己的变量的(本地)备份:

范围  (8)

赋值  (3)

共享单个值:

把一个新的值赋给一个共享变量:

仅保留最后执行的赋值:

添加到一个共享列表:

共享变量的部分  (3)

有效访问共享列表中的单个元素:

改变共享变量的单个元素:

修改共享变量的一部分内容:

关联  (2)

为特定键赋值:

若键是字符串,则可以省略 Key

修改关联中的值:

推广和延伸  (1)

在主内核上定义的延迟值在主内核上进行计算:

在子内核上定义的延迟值在需要值的内核上进行计算:

应用  (5)

使用共享变量来同步化一个无限搜索中的输入和输出:

求使得 为素数的 ,直到计算被手动退出:

使用一个共享变量来预示一旦找到一个素数所有计算停止:

使用一个共享变量来分配要进行的任务:

监控计算过程,对主要的计算步骤进行计数:

一旦找到,即返回结果:

查看实时出现的结果:

属性和关系  (3)

$KernelCount 是一个有效的共享变量:

共享的变量被包含在 $SharedVariables 中:

可用 SetSharedFunction 共享函数的定义:

实际上,在主内核上对共享函数进行计算:

可能存在的问题  (3)

共享变量不支持关联访问的单括号符号:

Part 符号代替:

分别进行读写操作对于线程不是安全的:

对于同步化,使用原子更新(atomic updates):

或者,使用 CriticalSection 使整个代码片段原子化:

创建值为大型矩阵的共享变量:

访问其元素导致整个矩阵被重复传递到子内核:

使用 Unevaluated 允许共享变量部分的特殊代码可以查看变量:

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

文本

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

CMS

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

APA

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

BibTeX

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

BibLaTeX

@online{reference.wolfram_2024_setsharedvariable, organization={Wolfram Research}, title={SetSharedVariable}, year={2008}, url={https://reference.wolfram.com/language/ref/SetSharedVariable.html}, note=[Accessed: 21-November-2024 ]}