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>
40 lines
710 B
Java
40 lines
710 B
Java
package examples;
|
|
|
|
import java.util.Stack;
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
@ThreadSafe
|
|
public class SyncStackExample<T> {
|
|
private Lock lock = new ReentrantLock();
|
|
private Stack<T> stc = new Stack<T>();
|
|
|
|
public void push(T item) {
|
|
lock.lock();
|
|
stc.push(item);
|
|
lock.unlock();
|
|
}
|
|
|
|
public void pop() {
|
|
lock.lock();
|
|
stc.pop();
|
|
lock.unlock();
|
|
}
|
|
}
|
|
|
|
@ThreadSafe
|
|
class FaultySyncStackExample<T> {
|
|
private Lock lock = new ReentrantLock();
|
|
private Stack<T> stc = new Stack<T>();
|
|
|
|
public void push(T item) {
|
|
lock.lock();
|
|
stc.push(item);
|
|
lock.unlock();
|
|
}
|
|
|
|
public void pop() {
|
|
stc.pop(); // $ Alert
|
|
}
|
|
}
|