谓词检查死锁

时间:2020-03-17 18:30:35

标签: prolog deadlock

我只希望有人对此提供帮助,因为我想要一个可以检查以下代码的死锁的函数。因此,通过检查死锁,我们将获得流程的执行顺序。如果它处于安全状态且没有死锁,并且存在死锁,则只需打印出false。但是我无法在Prolog中做到这一点,所以有人可以帮我修改下面的代码,以使其在出现死锁时打印为假吗?

processes([1,2,3,4]).

request(1,r1).
request(3,r2).

allocated(1,r2).
allocated(2,r1).
allocated(3,r1).
allocated(4,r2).

findrequested([],[]).
findrequested([H|T],[X|R]) :-
    allocated(H,_),
    request(H,_),
    X is H,
    findrequested(T,R).
findrequested([H|T],R) :-
    findrequested(T,R).

findNotrequested([],[]).
findNotrequested([H|T],[V|R]) :-
    allocated(H,_),
    \+ request(H,_),
    V is H,
    findNotrequested(T,R).
findNotrequested([H|T],R) :-
    findNotrequested(T,R).

results(Res):-
    processes(P),
    findrequested(P,R),
    findNotrequested(P,M),
%   checkDeadlock(M),
    list_empty(M),
    append(M,R,Res).

% checkDeadlock(L):-
%list_zerolength(L,E),
%E = true .

%list_zerolength(List, Empty) :-
% length(List, Len),
% ( Len == 0
% -> Empty = true
% ; Empty = false
% ).

0 个答案:

没有答案
相关问题