SC_THREAD 的 wait() 语句不会阻塞 OS 线程

SC_THREAD's wait() statement does not block OS thread

我在较大的程序中同步线程时遇到了一些问题,并注意到我的一些等待语句从未返回,所以我决定只编写一个简单的线程来测试等待的功能,并注意到它在SC_SEC 级别。这是我的例子 运行:

void Transmit::Tx(){
    time_t t1, t2;
    while (1){
        t1 = time(NULL);
        wait(10, SC_SEC);
        t2 = time(NULL);
        cout << t2 - t1 << endl;
    }
}

我的线程是空闲的 运行 我希望线程暂停 10 秒然后恢复并且打印输出每次都应该是 10,但我看到 0 并且它不是每 10 秒打印一次,它正在打印就像它忽略了我的等待声明。我不知道我在这里做错了什么。我正在关注 this 以了解我对等待的理解,但我不明白问题是什么。

同样,当我尝试使用 2 个线程进行测试,其中一个将数据写入 fifo,等待一段时间,另一个从 fifo 读取数据并等待一段时间,我注意到线程从未从等待中返回.

您是尝试使用 SystemC 对硬件设计进行建模还是尝试使用 SystemC 进行软件建模? 看来你把上下文搞混了。

SystemC 主要用于建模硬件设计(类似于 VHDL 和 Verilog)。

您在 SystemC 上下文中观察到的计时概念与现实世界的时间完全无关。

当然,在 SystemC 中切换线程时,您总是会观察到接近零时间的执行时间,因为它只是将执行上下文切换到其他线程,而 SystemC 内核只是同步 虚拟时间(即模拟时间)对SystemC内核中基于时间(虚拟时间)的事件进行建模。