我想在多个线程上并行运行我的z3代码。在我的程序结构中,我首先使用所有断言初始化我的Z3求解器,然后请求满意的解决方案。
有没有办法克隆Z3求解器,这样我就可以创建多个克隆并将克隆传递给多个线程?
我的想法是......
Solver slvr1;
//initialize and add all assertions on solver 1.
//then create N number of clone solvers.
//Finally run each solver clone on each thread.
我可以自己创建克隆自己创建一个求解器数组并在断言过程中断言每个,但我不想这样做,因为这可能效率不高。
我正在使用dot net API。所以如果有人能在dot net api上下文回答我,那会更有帮助。
答案 0 :(得分:3)
有一种方法可以在上下文之间转换求解器。使用它。
https://github.com/Z3Prover/z3/blob/master/src/api/dotnet/Solver.cs
请记住,上下文不是线程安全的,因此请在不同的线程中使用不同的上下文。