syncDict

语法

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

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

参数

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

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

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

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

详情

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

例子

x=1 6 3
y=4.5 7.8 4.3
z=syncDict(x,y);
// output
3->4.3
1->4.5
6->7.8

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

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


// y 为 DECIMAL32 类型的向量,将 y 作为 value 值创建有序字典 z
x=1 3 2
y = decimal32(1.23 3 3.14, 3)
z=dict(x,y,true);
z;
// output
1->1.230
3->3.000
2->3.140

下面的例子中,我们分别对普通字典 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