[ Engines and Threads | Reference Manual | Alphabetic Index ]

engine_clone(+Original, +Clone, +Options)

Clone the complete state of an engine
Original
Engine to be cloned (handle)
Clone
Engine to become a clone (handle)
Options
List of options

Description

Make a duplicate of the Original engine by copying all its computational state (stacks, data, current point in execution) to the Clone engine. After cloning, Original and Clone have identical computational state, and can be independently resumed.

To allow cloning, the Original engine must exist and must have stopped, i.e. have a status other than 'running' or 'exited'. The Clone engine must be either newly created, or have stopped with status 'false' or 'exception'. After cloning, Clone is in the same state as Original.

No options are currently supported.

Modes and Determinism

Examples

    ?- engine_create(Orig, []), 
       engine_resume(Orig, (writeln(hello) ; writeln(world)), true),
       engine_create(Clone, []), 
       engine_clone(Orig, Clone, []), 
       engine_resume(Clone, fail, CloneStatus),
       engine_resume(Orig, fail, OrigStatus).

    hello
    world
    world

    Orig = $&(engine,"46445b")
    Clone = $&(engine,"464b9b")
    CloneStatus = true
    OrigStatus = true
    Yes (0.00s cpu)
    

See Also

engine_create / 2, engine_resume / 3, engine_resume_thread / 2, engine_join / 3, get_engine_property / 3