Closed dqiang closed 2 weeks ago
大佬,请教一个问题,如果我创建了这个 lite::onnxruntime::cv::detection::YoloV5 *yolov5 =
new lite::onnxruntime::cv::detection::YoloV5(onnx_path)的实例,这个yolov5可以在多线程同时执行目标检测么
比如
auto future1 = std::async(std::launch::async, [&](){
yolov5->detect(); }); auto future2 = std::async(std::launch::async, [&](){ yolov5->detect(); });
这样多线程同时使用这个实例会不会有问题呢?
您好 对于这个问题我还没有测试过 但是你的实例代码的话 可能会出现一些竞争的情况 如果你是只实例化了一个检测器但是用std库分为两个线程的话有很大的概率是出现错误的情况 首先可能是ortsession的内部状态混乱具体可能表现为thread1在使用ort session但是thread2也真好处在ortsession的阶段 另外可能是前处理之后create_session的阶段出现数据竞争的情况 我的理解是如果你只实例化了一个yolov5的检测器那么大概率可能会出现数据竞争的情况从而导致处理结果错误 这里建议可以尝试构造两个对象来完成你的目标
大佬,请教一个问题,如果我创建了这个 lite::onnxruntime::cv::detection::YoloV5 *yolov5 = new lite::onnxruntime::cv::detection::YoloV5(onnx_path)的实例,这个yolov5可以在多线程同时执行目标检测么 比如
auto future1 = std::async(std::launch::async, [&](){ yolov5->detect(); }); auto future2 = std::async(std::launch::async, [&](){ yolov5->detect(); });
这样多线程同时使用这个实例会不会有问题呢?