In contrast to a Non-Receptive Mixer, the environment of a Mixer need not guarantee mutual exclusion of the passive requests. A request on a passive port while the Mixer is `busy' (processing a request on the other passive port) is not lost but is handled when the Mixer becomes `idle' again.
When a Mixer receives requests on both passive ports, it will process exactly one of them (and delay the other). The specification leaves the choice open. Often there is a fairness requirement on this choice: if a choice situation arises `infinitely often' then both outputs are chosen `infinitely often'.


Specification in Verdect:
define MIXER =
|[ a0, a1, a, b0, b1 ::
pref *[ ar?; a0; a1; aa! ]
|| pref *[ br?; b0; b1; ba! ]
|| pref *[ (a0 | b0); a ]
|| pref *[ a; cr!; ca?; (a1 | b1) ]
]|
end
Also available through this link
Specification in DI Algebra:
NAME = "Mixer"
I = { r0, r1, a }
O = { a0, a1, r }
MX = [ r0? -> r!; M0
, r1? -> r!; M1
]
M0 = [ r1? -> M2
, a? -> a0!; MX
]
M1 = [ r0? -> M2
, a? -> a1!; MX
]
M2 = a?; [ a0! -> r!; M1, a1! -> r!; M0 ]
[{r0},{a0}]
[{r1},{a1}]
[{r},{a}]
Also available through this link
The roles of ports a and b can be interchanged:
MIX(a, b; c) =
MIX(b, a; c)
A Mixer is not output deterministic, since there is output disabling in states 9 and 10 (not in 11!). The output nondeterminism is dynamic.

No information available
No information available
The Mixer can be generalized to a k-mixer, which multiplexes k passive ports onto one active port. A Mixer is a 2-Mixer.