mirror of
https://github.com/github/codeql.git
synced 2025-12-17 09:13:20 +01:00
- favour unary predicates over binary ones (the natural "conflicting access" is binary) - switch to a dual solution to trade recursion through forall for simple existentials. Co-authored-by: Anders Schack-Mulligen <aschackmull@github.com>
72 lines
1.3 KiB
Java
72 lines
1.3 KiB
Java
package examples;
|
|
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
@ThreadSafe
|
|
public class C {
|
|
|
|
private int y;
|
|
private Lock lock = new ReentrantLock();
|
|
private Lock lock2 = new ReentrantLock();
|
|
|
|
public void m() {
|
|
this.y = 0; // $ Alert
|
|
this.y += 1; // $ Alert
|
|
this.y = this.y - 1; // $ Alert
|
|
}
|
|
|
|
public void n4() {
|
|
this.y = 0; // $ Alert
|
|
this.y += 1; // $ Alert
|
|
this.y = this.y - 1; // $ Alert
|
|
}
|
|
|
|
public void setY(int y) {
|
|
this.y = y; // $ Alert
|
|
}
|
|
|
|
public void test() {
|
|
if (y == 0) { // $ Alert
|
|
lock.lock();
|
|
}
|
|
y = 0; // $ Alert
|
|
lock.unlock();
|
|
}
|
|
|
|
public void n() {
|
|
this.lock.lock();
|
|
this.y = 0;
|
|
this.y += 1;
|
|
this.y = this.y - 1;
|
|
this.lock.unlock();
|
|
}
|
|
|
|
public void callTestLock2() {
|
|
lock2.lock();
|
|
setY(1);
|
|
lock2.unlock();
|
|
}
|
|
|
|
public void n2() {
|
|
lock.lock();
|
|
this.y = 0;
|
|
this.y += 1;
|
|
this.y = this.y - 1;
|
|
lock.unlock();
|
|
}
|
|
|
|
public void n3() {
|
|
lock.lock();
|
|
y = 0;
|
|
y += 1;
|
|
y = y - 1;
|
|
lock.unlock();
|
|
}
|
|
|
|
public void callTest() {
|
|
lock.lock();
|
|
setY(1);
|
|
lock.unlock();
|
|
}
|
|
} |