# Class Uq_engines.msync_engine

    class [['a, 'b]] msync_engine : 'a #engine list -> ('a -> 'b -> 'b) -> 'b -> Unixqueue.event_system -> ['b] engine

Multiple synchronization: `let me = new msync_engine el f x0 esys` - Runs the engines in `el` in parallel, and waits until all are ``Done`. The result of `me` is then computed by folding the results of the part engines using `f`, with an initial accumulator `x0`.

If one of the engines goes to the states ``Aborted` or ``Error`, the combined engine will follow this transition. The other, non-aborted and non-errorneous engines are aborted in this case. ``Error` has higher precedence than ``Aborted`.

If calling `f` results in an exception, this is handled as if the part engine signals an error.

If the combined engine is aborted, this request is forwarded to all member engines.