Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Transition<T> fire(Collection<Transition<T>> transitions) throws InterruptedException {
- Map<T, Integer> tmp;
- Semaphore tmp1;
- Collection<Transition<T>> tmp2;
- Transition<T> result = null;
- boolean doAble = false;
- while(true){
- try{
- mutex.acquire();
- for(Transition<T> iterator : transitions) {
- if(checkTransition(iterator, this.initial)){
- doAble = true;
- result = iterator;
- break;
- }
- }
- if (doAble == false) {
- tmp1 = new Semaphore(0);
- queue.add(tmp1);
- waiting.put(tmp1, transitions);
- mutex.release();
- tmp1.acquire();
- }
- for(Transition<T> iterator : transitions) {
- if(checkTransition(iterator, this.initial)){
- result = iterator;
- break;
- }
- }
- tmp = doTransition(result, this.initial);
- this.initial = tmp;
- return result;
- }
- finally{
- for (Semaphore sem : queue) {
- tmp2 = waiting.get(sem);
- for(Transition<T> iterator : tmp2){
- if(checkTransition(iterator, this.initial)){
- sem.release(); //dziedziczenie sekcji krytycznej
- }
- }
- }
- mutex.release();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement