systemc - 从 SC_THREAD 进程调用 sc_fifo::nb_write() 是否安全?
问题描述
我正在将我的一些代码从 SC_THREAD 转换为 SC_METHOD。我的问题是,我需要停止使用 sc_fifo 类吗?我意识到 SC_METHOD 不应该调用 sc_fifo.write() 因为这使用了一个等待调用,这对于无法挂起的函数是不允许的。但是,sc_fifo 提供了各种功能的非阻塞版本,我可能可以使用这些版本。我读过的一些文档表明您根本不应该使用 SC_METHOD 中的 sc_fifo,但没有提供任何理由。
这是我目前正在使用的代码示例。
class Example : public sc_module {
public:
sc_fifo<int> myFifo;
sc_in<bool> clock_in;
SC_HAS_PROCESS(Example);
// constructor
Example(sc_module_name name) : sc_module(name) {
SC_METHOD(read);
sensitive << clock_in;
}
void read() {
int value = -1;
bool success = myFifo.nb_read(value);
if (success) { cout << "Read value " << value << endl; }
else { cout << "No read done but that's okay." << endl; }
}
};
int sc_main(int argc, char* argv[]) {
sc_clock clock("clock");
Example example("example");
example.clock_in(clock);
sc_start(10, SC_NS);
return 0;
}
即使我从 SC_METHOD 调用 sc_fifo 函数,这也不会引发错误。从 SC_METHOD 内部使用 nb_read() 是不好的策略吗?如果是,为什么?
解决方案
使用来自 SC_METHOD 的 sc_fifo 非阻塞调用应该没问题。我没有在标准手册中找到任何禁止它的地方。
推荐阅读
- python - 比较列表Python中的多个列表
- windows - 启用/禁用代理的 Bat 文件
- .htaccess - 如果 URL 包含某个符号,则 htaccess 重定向
- windows-installer - 是否可以从 msi 安全删除 ScheduleReboot?
- freeradius - 如何使 LDAP 身份验证在 EAP 上工作
- android - 将布局滑动到屏幕中间(向上滑动),然后向上或向下滑动
- java - Random Number generating in java without having any number of 0 in it
- java - Is passing Object type as a method parameter always a sign of poor design?
- php - 选择类型数据集mysql
- javascript - 为什么抛出错误会记录错误:未捕获 ....(错误消息)?