Page 152 - 《软件学报》2021年第9期
P. 152

2776                                 Journal of Software  软件学报 Vol.32, No.9,  September 2021

         PSTR2,PSTR3,PSTRbit 和 PCT,并进行了一般化总结,它们同样主要由更新表(算法 8)和过滤论域(算法 9)两部分
         组成.
             算法 7. enforceTGAC(c).
             begin
             1    if inconsistent then
             2        return
             3    for each x∈scp(c) do
                           c
             4        bitdom (x):=bitdom(x)
             5    updateTTable(c)
             6    filterTDomains(c)
             end
             算法 8. updateTTable(c).
             begin
             1    for each τ∈rel(c) do
             2        for each x∈scp(c) do
                                 c
             3            if bitdom (x)[τ[x]]=0b then
             4                rel(c):=rel(c)\{τ}
             5                break
             end
             算法 9. filterTDomains(c).
             begin
             1    for each x∈scp(c) do
                                          c
             2        for each a of which bitdom (x)[a]=1b do
             3            if a doesn’t have a temporary support then
                                   c
             4                bitdom (x)[a]:=0b
                             c
             5        if bitdom (x) has been filtered then
                                                 c
             6            bitdom(x):=bitdom(x)&bitdom (x)  //non-blocking synchronization
             7            if bitdom(x)=0 then
             8                inconsistent:=true
             9                return
             10           varChanged:=true
             11           tableMask:=tableMask|bitSbp(x)    //non-blocking synchronization
             end
             与算法 3 不同的是,算法 7 首先判断不相容标识 inconsistent 是否为真:如果为真,算法 7 返回,即所有的线程
                                                                                       c
         能够及时终止并行过滤任务;如果为假,算法 7 将每个变量 x∈scp(c)在 c 中的局部中间论域 bitdom (x)更新至最
         新的 bitdom(x);然后,算法 7 更新表,即移除无效的元组(算法 8 第 4 行);最后,算法 7 过滤论域,即先从局部中间论
                                                                                   c
                 c
         域 bitdom (x)中删除在该约束上不存在临时支持的值(算法 9 第 4 行).若局部中间论域 bitdom (x)被删值,算法 9
                                                                                      c
                            c
         便将 bitdom(x)与 bitdom (x)的按位与结果赋值给 bitdom(x),即从 bitdom(x)中删除不存在于 bitdom (x)中的值(算
         法 9 第 6 行).进一步地,如果 bitdom(x)被删空,即 bitdom(x)的每个位均为 0b,全局不相容标识 inconsistent 被置为
         true(算法 9 第 8 行),并行过滤算法结束;否则,论域改变标识 varChanged 被置为 true(算法 9 第 10 行),并且变量 x
         的位订阅 bitSbp(x)被提交至约束位标识 tableMask 上(算法 9 第 11 行),即与 x 有关的约束 c 需要参与下一次并
         行传播.
   147   148   149   150   151   152   153   154   155   156   157