工具与软件:
似乎出队/获取都有一个流、它们返回时没有解锁()。
是否有一些更高级别的 openvx 行为应该防止此错误发生?
这 应该同时适用于 vx_graph_schedule_mode_queue_auto 和 manual 吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
似乎出队/获取都有一个流、它们返回时没有解锁()。
是否有一些更高级别的 openvx 行为应该防止此错误发生?
这 应该同时适用于 vx_graph_schedule_mode_queue_auto 和 manual 吗?
排队 API 也是如此:
https://github.com/TexasInstruments/edgeai-tiovx-apps/blob/develop/modules/core/src
但排队("队列已满")/获取("无可用缓冲区")方案似乎不太可能在正确编写的应用程序中发生、
出队情形("空队列")似乎是一个完全合法的情形
您好!
在您位于 TIOVX 图形本身的边界时、通常会从 HLOS/Linux 侧调用 tiovx_modules_enqueue_buf 和类似函数来进行缓冲池管理。
您想问的是这个情况(TIOVX 的边界)还是 TIOVX 堆栈中的情况、这与图形中的节点如何在节点之间进入队列/出队相关。 在图形内部、这将在中间节点之间自动发生--这是 TIOVX 堆栈本身的一部分、而不是你在这里看到的 tiovx-modules/apps。 TIOVX 内部的保护效果将比这些兼容 HLOS/Linux 的 API 更好
从从 Linux 等 HLOS 运行的 tiovx-apps 中、可以尝试从没有可用缓冲区的池中取消缓冲区队列、并在缓冲区已满时类似使其进入队列。 因此、我在执行此操作之前会遇到运行时错误。 此处的保护受到限制、用户应检查返回的缓冲区是否为空。
请确认这是否与 TIOVX 图形的边界相关或在图形中。 这将会改变答案以及指向您的位置。
注:我解锁了该主题帖、但不能取消标记为已解析。 那么我们可以创建一个新的线程、因为它会阻止我们。
您好、T S:
我们有信号用于获取缓冲区、因此它会被阻止、直到可用的缓冲区。 那么会发生该误差
https://github.com/TexasInstruments/edgeai-tiovx-apps/blob/d9958735a492c7281f3dc4508fa21386e611b31d/modules/core/src 149/tiovx_modules.c#l149.
对于出队、如您所指出的、OpenVX 出队 API 会阻止并等待缓冲区进入队列并进行处理
此致
Rahul T R
TS, Rahul 的回答是否回答了您的问题?
例如、此处的捕获/显示测试是很好的参考。
正如 Rahul 所说、TIOVX 从队列将会阻塞这里。 与排队类似、它将是阻塞调用、直到缓冲池为新的缓冲区做好准备。 在某些情况下、这可能会导致竞态条件(例如在排队之前尝试取消队列)--我们通常会避免这种情况、方法是在启动应用程序的主体之前进入缓冲池队列。
否则、互斥量将阻止多个线程同时访问缓冲池。 从技术上讲、不应该达到返回"NULL"的条件、我们可以消除该条件。
您好、T S:
在获取的情况下、我们在锁定 bufpool 之前执行 sem_wait
因此、如果超过了 SEM_WAIT、这意味着有一个可用的缓冲区可供采集
同样、在出队情况下、我们首先调用 OpevVX 出队 API、然后再锁定缓冲池
您是否正在使用 TIOVX 应用的最新版本?
如果没有、请切换到最新版本、然后检查是否仍能看到问题
如果您提供了重现问题的简单示例、我很乐意查看并解决该问题
此致
Rahul T R