0

我有一个由多个线程组成的系统,比如说进程 A、B 和 C,这些进程完全用 SDL 编写,最终在编译后转换为 C 语言。

我也有一个具有相同进程的等效模拟环境,它只在一个线程上运行,但模拟这些进程中的每一个。基本上,进程 A、B 和 C 中的每一个都使用一组不同的选项重新编译,并且以某种方式一切都作为一个进程运行(典型的 IBM-SDL 模拟)。这在理论上代表了真实过程的轻量级系统,并且一切都作为一个过程运行。现在在这个模拟环境中,可以生成三个文件,让我们说:-Ac Bc 和 Cc 显然在这个模拟中,没有进程抢占的空间。如果消息 X 到达进程 A,A 将完全处理此信号,然后进入下一个状态转换,只有当下一个信号进入系统时,下一个进程才会运行。

我正在尝试在这个没有线程的模拟系统中实现抢占。事实证明,在模拟中,这些文件中的每一个都可以被编辑(通过一些脚本),并且我知道在一个接一个地执行一组特定信号的过程中可能的确切抢占点。

我的问题是:- 如果我插入条件 goto / break 语句(假设每个 Ac、Bc 和 Cc 中的每一行)并在代码执行期间从一个文件跳转到另一个文件,我是否实现了模拟线程环境?

或者我在这里错过了什么?

我知道这是一个非常广泛的问题,而且我的操作系统知识不是很好。另外,我知道这种情况可能有很多条件起作用。但是让我们假设我找到了解决这些问题的方法。我的问题归结为:-如果“智能” goto 可以等效地用作单线程环境中多线程的替代品?时间对我来说不是问题,因为我正在使用模拟时间。系统负载等,没关系。我正在考虑在每个文件 Ac、Bc 和 Cc 的每个步骤之后添加一个控制函数调用,并且在这个控制函数中我可以检查我是否要返回,或者跳转到其他地方并继续从另一个文件执行。在这种方法中我会面临什么样的实施困难?

4

1 回答 1

1

听起来您在谈论协作多任务,这就是 Windows 的第一个版本的工作方式。进程不仅可以随心所欲地运行,而且会被操作系统抢占;它们会运行一段时间,然后将控制权“交还”给操作系统,操作系统会安排另一个应用程序运行。

这种事情仍然可以在单个线程的上下文中工作。它被称为光纤。纤维就像轻量级的线;它们通过合作让另一个纤程执行,而不是依赖操作系统来执行任务切换来工作。好处是减少了任务切换通常产生的开销。

于 2012-10-11T04:44:15.277 回答