我有一个由多个线程组成的系统,比如进程A,B和C,这些进程完全用SDL编写,最终在编译后转换为C语言。
我还有一个具有相同进程的等效仿真环境,它只能在一个线程上运行,但会模拟每个进程。 基本上,每个进程A,B和C都使用一组不同的选项进行重新编译,并且不知何故,所有进程都作为一个进程(典型的IBM-SDL仿真)工作。这在理论上代表了真实过程的轻量级系统,一切都是一个过程。 现在在这个模拟环境中,有三个文件可以生成,让我们说: - A.c B.c和C.c. 显然,在这个模拟中,没有先发制人的过程。如果消息X进入进程A,A将完全处理该信号,然后进入下一个状态转换,然后只有当下一个信号进入系统时,下一个进程才会运行。
我试图在没有线程的情况下在这个模拟系统中实现抢占。事实证明,在模拟中,可以编辑这些文件中的每一个(通过一些脚本),并且我知道一个接一个地执行特定信号的过程中确切可能的抢占点。
我的问题是: - 如果我插入条件goto / break语句(在让我们假设每个A.c,B.c和C.c中的每一行之后)并在代码执行期间从一个文件跳转到另一个文件,我是否实现了一个模拟的线程环境?
或者我错过了什么?
我知道它是一个非常广泛的问题,我的操作系统知识并不是很好。此外,我知道这种情况可能有很多条件可行。但我们假设我找到了解决这些问题的方法。 我的问题归结为: - 如果“智能”goto可以等效地用作单线程环境中多线程的替代? 时间对我来说不是问题,因为我正在模拟时间。 系统负载等,无所谓。 我想在每个文件A.c,B.c和C.c中的每一步之后添加一个控制函数调用,在这个控制函数中我可以检查我是否要返回,或者跳转到其他地方并继续从另一个文件执行。 在这种方法中我会遇到什么样的实施困难?
答案 0 :(得分:1)
听起来有点像cooperative multitasking,这就是Windows的第一个版本的工作原理。进程不仅仅是在他们想要的时候运行,而是被操作系统抢占;它们会运行一段时间,然后“控制”回到操作系统,操作系统会安排另一个应用程序运行。
这种事情仍然可以在单个线程的上下文中工作。它被称为Fiber。纤维就像轻质线;它们协同工作,使执行到另一个光纤,而不是依靠操作系统来执行任务切换。好处是减少了任务切换通常会产生的开销。