multithreading - 多线程程序可以是确定性的吗?

标签 multithreading non-deterministic

通常说多线程程序是不确定的,这意味着如果它崩溃,几乎不可能重新创建导致这种情况的错误。人们永远不知道接下来将运行哪个线程,以及何时再次被抢占。

当然,这与操作系统线程调度算法以及人们不知道接下来将运行哪个线程以及它将有效运行多长时间这一事实有关。
程序执行顺序也起作用,等等......

但是,如果您拥有用于线程调度的算法,并且您可以知道什么线程正在运行,那么多线程程序是否会变得“确定性”,例如,您将能够重现崩溃,该怎么办?

最佳答案

了解算法实际上并不能让您预测何时会发生什么。程序或线程执行中发生的各种延迟取决于环境条件,例如:可用内存、交换、传入中断、其他繁忙任务等。
如果您要将多线程程序映射到顺序执行,并且您的线程本身具有确定性的行为,那么您的整个程序可能是确定性的,并且“并发”问题可以重现。当然,到那时它们将不再是并发问题。
如果您想了解更多,http://en.wikipedia.org/wiki/Process_calculus读起来很有趣。

关于multithreading - 多线程程序可以是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3830347/

相关文章:

c++ - 用户运行时环境中的并行进程

java - JVM 或底层操作系统是否处理线程状态更改

c# - 任务并行库 (TPL) 是否处理竞争条件

java - 另一个线程进入休眠状态后移至主线程

haskell - 您如何使用列表 monad 来计算/表示非确定性计算的结果?

apache-spark - Apache Spark 的非确定性来源

c++ - 使用堆内存(malloc/new)会创建一个不确定的程序吗?

java - 使用run方法启动一个观察者线程

python - 播种 Python RNG 显示集合的非确定性行为