syncDict

语法

syncDict(keyObj, valueObj, [sharedName], [ordered=false])

syncDict(keyType, valueType, [sharedName], [ordered=false])

参数

第一种用法中,keyObj 是表示键的标量或向量,valueObj 是表示值的标量或向量。

第二种用法中,keyType 是字典键的数据类型; valueType 是字典值的数据类型。系统支持以下键的数据类型:Logical, Integral, Floating和Temporal。字典中的值不支持 COMPLEX, POINT 和 Decimal 类别。

sharedName 为一个字符串。指定后此字典会被共享,共享的字典名为sharedName。

ordered 一个布尔值,默认为 false,表示创建一个无序字典。当 ordered = true 时,创建一个有序字典。无序字典在输出或进行遍历时,其键值对不保留输入时的顺序;有序字典在输出或进行遍历时,键值对的顺序与输入顺序保持一致。

详情

创建一个线程安全的同步字典。同步字典允许多个线程对其进行并发读写。

例子

$ x=1 2 3
$ y=4.5 7.8 4.3
$ z=syncDict(x,y);
3->4.3
1->4.5
2->7.8

$ z=syncDict(INT,DOUBLE)
$ z[5]=7.9
$ z;
5->7.9

$ syncDict(INT,DOUBLE, `sn)
$ sn[5 6]=10.99 2.33
$ sn[5];
10.99

下面的例子中,我们分别对普通字典z1和同步字典z2并发写入。

对普通字典z1进行多线程并发写入会造成节点崩溃:

$ def task1(mutable d,n){
$     for(i in 0..n){
$         d[i]=i*2
$     }
$ }

$ def task2(mutable d,n){
$     for(i in 0..n){
$         d[i]=i+1
$     }
$ }
$ n=10000000

$ z1=dict(INT,INT)
$ jobId1=submitJob("task1",,task1,z1,n)
$ jobId2=submitJob("task2",,task2,z1,n);

同步字典z2允许多线程并发写入:

$ z2=syncDict(INT,INT)
$ jobId3=submitJob("task1",,task1,z2,n)
$ jobId4=submitJob("task2",,task2,z2,n)
$ getJobReturn(jobId3, true)
$ getJobReturn(jobId4, true)
$ z2;

相关函数

array, matrix, dictUpdate!, dict