One way to improve the efficiency of logic programs is to allow execution of subgoals in parallel. If two or more subgoals share a variable, however, it is possible that if they are executed in parallel, they will return conflicting answers; that is, they may return two different bindings that cannot be unified.
One approach to dealing with this potential problem is to identify all sets of subgoals that share a variable and label one subgoal in the set the generator and the others the consumers. The generator is responsible for finding a binding for the variable, and the consumers verify the validity of the binding. This paper presents an algorithm using this approach that is an improvement on some existing algorithms in that the choice of generators and consumers is dynamic instead of static, thus allowing for a greater degree of parallelism. The algorithm also incorporates some useful features of existing algorithms in which the choice of generators and consumers is static. Thus it may also improve on existing algorithms in which the choice is dynamic.