多线程程序能否具有确定性?

Ton*_*ion 8 multithreading non-deterministic

通常,据说多线程程序是非确定性的,这意味着如果它崩溃,则几乎不可能重新创建导致该条件的错误.一个人真的不知道接下来会运行什么线程,以及它什么时候会再次被抢占.

当然这与操作系统线程调度算法有关,而且事实上人们不知道接下来要运行什么线程,以及它将有效运行多长时间.程序执行顺序也起到了作用,等等......

但是如果你有用于线程调度的算法怎么办?如果你知道什么线程正在运行,那么多线程程序是否会变成"确定性",就像在,你将能够重现崩溃?

Hab*_*bie 12

知道算法实际上不会让你预测什么时候会发生什么.在执行程序或线程时发生的各种延迟取决于环境条件(自由RAM - >交换,其他繁忙任务,进入的中断等).

如果您要将多线程程序映射到顺序执行,并且您的线程本身在其行为中是确定性的,那么您的整个程序可能是确定性的,并且"并发"问题可以重现.当然,在那时他们不再是并发问题了.

如果您想了解更多信息,请http://en.wikipedia.org/wiki/Process_calculus阅读非常有趣.


And*_*rey 6

我的意见是:技术上没有(但数学上是).您可以编写确定性线程算法,但是在一段合理的时间后,您可以非常难以预测应用程序的状态,您可以将其视为非确定性的.

  • 更好的说法,你回答的是:"数学上,是的.实际上,没有." (2认同)