2013-05-11 33 views
0

我正在寫一個路徑分析工具,並且我使用jdt Astparser來修改源代碼 如果我想在每條原始行之後添加一些代碼並讓它們是原子操作,不會改變源代碼的行爲。就像這樣: 原始源代碼:源代碼操作(添加同步塊)更改變量範圍

int a = 0; 
int b = 0; 
a = b; 

操作

synchronized (lock) { 
int a = 0; //original code 
//my code 
//.... 
//end 
} 
synchronized (lock) { 
int b = 0; //original code 
//my code 
//.... 
//end 
} 
synchronized (lock) { 
a = b; //original code 
//my code 
//.... 
//end 
} 

之後,但它改變了變量的作用域,變量a和b不再是全球性的代碼無法編譯。

是否有任何變量聲明和代碼後,我插入結合起來,讓它們成爲原子操作,不改變變量的作用域方法?

...和我的英語水平:)對不起

+1

如果你不希望他們在街區的範圍,不要在塊申報。 – 2013-05-11 04:15:40

+0

我想要的變量聲明和代碼我插入之後是原子操作,以便它必須在塊 – kaze13 2013-05-11 04:18:14

+0

@布賴恩羅奇見上文。 – kaze13 2013-05-11 05:17:34

回答

1

不要在塊申報。這與初始化本身無關。

int a, b; 

synchronized (lock) { 
    a = 0; 
} 
synchronized (lock) { 
    b = 0; 

} 
synchronized (lock) { 
    a = b; 
} 

我不知道爲什麼你使用三個​​塊,不過,除非代碼是更復雜的比你的例子說明。

+0

其實我想在「int a,b;」之後添加一些代碼並且它們應該是原子的 – kaze13 2013-05-11 06:08:16

+0

寫入'int a,b;'只是將它們聲明在當前範圍內。你可以從'synchronized'塊中訪問它們,並且做你想做的任何操作。 – sapi 2013-05-11 06:24:34