求解器状态
大多数时候,您的外部函数将在求解器处于运行状态时被调用。在这种状态之中不要尝试调用解算器的任何方法(用于检索统计信息、LSExpressions的值等),否则将抛出异常。唯一可访问的函数是LocalSolver::stop()。
线程安全
LocalSolver的搜索策略默认是多线程的。因此,多个线程可以同时调用外部函数和代码。这不是一个问题,只要你的外部功能没有任何副作用。在其他情况下,您有责任通过使用互斥锁(mutexes)、临界区或任何其他您想要的锁定机制来确保代码的线程安全。如果不想处理多线程问题,也可以使用nbThreads参数将线程数限制为1。
注意:这个建议只适用于c#、c++和Java。Python (CPython)和LSP解释器使用全局解释器锁(也称为GIL)来同步底层虚拟机的访问,这样一次只能执行一个线程。如果CPython和LSP的这个特殊属性简化了外部函数的使用,它也会对性能产生重大影响,因为它阻止了搜索并行化(参见性能问题)。
下一章:Local Solver性能问题 (无锡迅合信息科技有限公司 localsolver中国区独家代理商2012-2024)。