Я только что закончил писать простую блокирующую очередь с семафорами, и я бы проверил ее синхронизацию.Как я могу проверить синхронизацию моей блокирующей реализации Queue
Я проверил свою стабильность реализации на большом количестве потоков, которые вставка и удаление из очереди,
Я хотел бы получить некоторую помощь с некоторыми идеями \ тестов о том, как проверить его в более исправленный способ.
public class BBQ<T> {
private ArrayList<T> tasks;
private Semaphore mutex;
private Semaphore full;
private Semaphore zero;
public BBQ(int numofWorkers){
tasks = new ArrayList<T>();
mutex = new Semaphore(1, true);
full = new Semaphore(numofWorkers, true);
zero = new Semaphore(0, true);
}
public boolean add(T item) {
boolean ans = false;
try {
zero.acquire();
mutex.acquire();
ans = tasks.add(item);
} catch (InterruptedException e) {
e.printStackTrace();
}
finally{
mutex.release();
full.release();
}
return ans;
}
public boolean remove() {
boolean ans = false;
try {
full.acquire();
mutex.acquire();
if (tasks.remove(0) == null) {
ans = false;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
finally{
mutex.release();
zero.release();
}
return ans;
}
public int size() {
return tasks.size();
}
public String toString() {
return tasks.toString();
}