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 不再是全局的,代码无法编译。

有没有什么方法可以结合变量声明和我之后插入的代码,让它们成为原子操作并且不改变变量范围?

...对不起我的英语:)

4

1 回答 1

1

不要在块中声明它们。这与初始化本身无关。

int a, b;

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

}
synchronized (lock) {
    a = b; 
}

不过,我不确定您为什么要使用三个synchronized块,除非代码比您的示例建议的要复杂得多。

于 2013-05-11T05:29:47.717 回答