通常说多线程程序是不确定的,这意味着如果它崩溃,几乎不可能重新创建导致这种情况的错误。人们永远不知道接下来将运行哪个线程,以及何时再次被抢占。
当然,这与操作系统线程调度算法以及人们不知道接下来将运行哪个线程以及它将有效运行多长时间这一事实有关。
程序执行顺序也起作用,等等......
但是,如果您拥有用于线程调度的算法,并且您可以知道什么线程正在运行,那么多线程程序是否会变得“确定性”,例如,您将能够重现崩溃,该怎么办?
最佳答案
了解算法实际上并不能让您预测何时会发生什么。程序或线程执行中发生的各种延迟取决于环境条件,例如:可用内存、交换、传入中断、其他繁忙任务等。
如果您要将多线程程序映射到顺序执行,并且您的线程本身具有确定性的行为,那么您的整个程序可能是确定性的,并且“并发”问题可以重现。当然,到那时它们将不再是并发问题。
如果您想了解更多,http://en.wikipedia.org/wiki/Process_calculus读起来很有趣。
关于multithreading - 多线程程序可以是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3830347/