Page 51 - 《软件学报》2021年第12期
P. 51

张杨  等:基于下推自动机的细粒度锁自动重构方法                                                         3715


             15.           end for
             16.           return r;
             17.        else if  指令为 if 条件判断指令&&判断语句为读操作  then
             18.           return c;
             19.        else if  指令为 if 条件判断结束指令  then
             20.           return e;
             21.        else return r;
             22.        end if
             23.     else return w;
             24.     end if
         2.4   锁推断
             在负面效应分析中,使用字符 c 表示一个 if 语句的开始,e 表示一个 if 语句的结束.由于判断语句每一个开
                                               n
                                                 n
         始对应着一个结束,负面效应分析会产生类似 c Ae (A 代表其他操作)的字符序列,其中,n>0.在匹配过程中,需要
         记录 c 和 e 的对应关系,因为 n 的值是不确定的,导致状态的个数也是不确定的,所以我们使用下推自动机对负
         面效应分析产生的临界区读写模式序列进行模式匹配,以确定程序重构后的加锁模式.
             定义 1.  用于推断细粒度锁模式的下推自动机 M fg =(Q,Σ,Γ,δ,q 0 ,Z 0 ,F)是一个七元组模型,其中,
             •   Q={q 0 ,q 1 ,…,q 7 }是一个有穷状态集;
             •   Σ={r,w,c,e}是输入字母表,其中,r 代表一个读操作,w 代表一个写操作,c 代表一个 if 条件判断语句的开
                始且条件判断为读操作,e 为一个 if 条件判断语句的结束标志;
             •   Γ={Z 0 ,C,R,W,D,A,B,V}是有限的堆栈字母表;
             •   δ=δ(q,x,X)是转移函数,一般使用规则〈q,x,X,q′,T〉代表转移函数,其中:q 为状态符号;x 为输入符号;X 和 T
                为栈符号,表示当下推自动机处于状态 q、当前输入字符为 x 且栈顶符号为 X 时,则下推自动机的状态
                变为 q′,并用符号串 T 代替栈顶符号 X.符号串 T 有 3 种形式,分别为 X′,X′X,ρ,其中,X′表示用字符 X′替
                换栈顶元素,X′X 表示将 X′压入栈中,ρ表示弹出当前栈顶元素;
             •   q 0 为初始状态;
             •   Z 0 为初始栈顶符号;
             •   F={q 1 ,q 3 ,q 4 ,…,q 7 }为终态集.
             下推自动机 M fg 的状态转换图如图 3 所示,其中,规则〈q,x,X,q′,T〉在图中表示为〈x,X/T〉,状态 q 到状态 q′的转
         移用直线箭头表示.


















                              Fig.3    State transition diagram of pushdown automaton M fg
                                       图 3   下推自动机 M fg 状态转换图
   46   47   48   49   50   51   52   53   54   55   56