Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用运行时大小参数构造boost spsc_队列以使用共享内存在两个进程之间交换cv::Mat对象?_C++_Opencv_Boost_Shared Memory - Fatal编程技术网

C++ 如何使用运行时大小参数构造boost spsc_队列以使用共享内存在两个进程之间交换cv::Mat对象?

C++ 如何使用运行时大小参数构造boost spsc_队列以使用共享内存在两个进程之间交换cv::Mat对象?,c++,opencv,boost,shared-memory,C++,Opencv,Boost,Shared Memory,尝试实现一个生成的使用者场景,其中一个进程将对象馈送到队列缓冲区。消费者会消费它们。有一个可以实现自定义内存管理的工具,但我没有成功地使它工作。从用户端的que弹出导致SEG故障。我得到的最接近的是whwre cv::Mat被序列化和反序列化。此实现的另一个缺点是在编译期间定义缓冲区大小。因此,我们要重申以下问题:如何在共享内存中高效地实现cv::Mat无锁队列 相关问题: cv::Mat的“可设置”分配器不是Boost进程间分配器 看起来要实现包装一个也“很难” 这可能是因为更高级的分

尝试实现一个生成的使用者场景,其中一个进程将对象馈送到队列缓冲区。消费者会消费它们。有一个可以实现自定义内存管理的工具,但我没有成功地使它工作。从用户端的que弹出导致SEG故障。我得到的最接近的是whwre cv::Mat被序列化和反序列化。此实现的另一个缺点是在编译期间定义缓冲区大小。因此,我们要重申以下问题:如何在共享内存中高效地实现cv::Mat无锁队列

相关问题:

  • cv::Mat的“可设置”分配器不是Boost进程间分配器

    看起来要实现包装一个也“很难”

    这可能是因为更高级的分配器是为支持CUDA而设计的,但我在这里猜测一下

    所以,我强烈建议连载。这应该没问题,除非你在处理巨型矩阵。见例

    当然,您可以序列化到共享内存:或者

    现在,如果你需要大的矩阵(并且它们需要OpenCV,无论如何)考虑使用现有的CV分配器来从共享内存中已经存在的相邻缓冲区分配。


    这可以是一个简单的
    向量
    ,或者实际上是
    数组
    ,构建在共享内存(托管(
    托管共享内存
    )或非托管(
    bip::mapped_区域
    ,在
    bip::共享内存
    对象之上工作)

    我认为它看起来很坚固。而且,非常慎重考虑是否需要LcckFiel::队列vs无锁::SPSCHEQUED。由于线程使用W.R.T.SPSCHyQueLeTANKS的额外限制,很容易在脚上开枪。我的ATTEPMT要像您所建议的那样实现:对于初学者来说,简单的字符串而不是CV::Mat。free::queue and vectors而不是base_string。尚未编译。:@alex我以前没有使用过
    lockfree::queue
    ,但查看需求表明它需要简单的赋值和析构函数:。向量没有这个功能。下一步:发现
    lockfree::queue
    不支持的。这完全排除了BIP分配器。(哦,顺便说一下,我用来解析)文档状态。然而,我只能为编译时容量打勾(这是meh,因为它真的不想以任何方式分配)。这里是我得到的:嗯,不仅队列大小,而且vec大小现在在编译时是固定的:(.没有额外的容量限制,队列将是一个比spsc_队列更容易的选择。