gpt4 book ai didi

java - 在 CPU 指令管道模拟器中管理 Java 线程

转载 作者:行者123 更新时间:2023-11-30 07:01:10 27 4
gpt4 key购买 nike

我使用多线程在 Java 中实现了 5 级 CPU 指令管道模拟器。

每个Stage都是一个线程,主要执行以下3个功能,每两个Stage之间还有一个队列(容量为1)。

  1. 从上一阶段接收。
  2. 流程,即履行其主要职责。
  3. 进入下一阶段。
    @Override
public void run() {
while (!(latchQueue.isEmpty())) {
fetch();
process();
forward();
}
}

模拟效果很好。这就是我陷入困境的地方,我希望能够仅模拟指定数量的时钟周期。因此,一旦达到指定的周期数,模拟器就应该停止/暂停。

到目前为止,我已经启动了所有 5 个线程,并让它模拟所有指令的处理,而不是通过时钟周期来限制它。

我怎样才能做到这一点?当指定的时钟周期达到时,我是否需要暂停线程?如果是这样,我该如何优雅地处理挂起/停止线程?请帮助我选择最好的方法。预先感谢:)

最佳答案

您已经在使用一些并发队列在线程之间进行通信(具体如何工作尚不清楚,因为您的代码示例相当不完整)。

因此,您可以在第一阶段计算周期,并使用相同的机制进行通信:将代表“停止/暂停此线程的时间”的哨兵对象插入第一阶段的队列,并在处理时处理它暂停处理器(并仍将其转发到下一个阶段,因此所有阶段将逐渐关闭)。例如,您可以扩展队列中传递的对象类型,以便层次结构包含真实的有效负载对象(例如,解码的指令等)或“命令对象”,例如此停止/暂停哨兵。

另一个异步解决方案是每个线程Thread.interrupt并在处理循环中添加中断检查 - 这主要是为了正常关闭,而不是为了支持“暂停”功能。

关于java - 在 CPU 指令管道模拟器中管理 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com