微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

tbb::concurrent_bounded_queue 中使用的内部容器是什么?

如何解决tbb::concurrent_bounded_queue 中使用的内部容器是什么?

我知道 std::queue 认使用 std::deque 作为其内部容器。我找不到 TBB 的相同信息。

我有一个遗留的多线程应用程序,它当前使用围绕 std::queue> 的线程安全包装器来存储相对较大的对象(58 字节)。我目前正在寻找更好的替代方案来提高性能

一种选择是摆脱链表并使用认的 std::deque 作为内部容器,并从指向对象的指针切换到按值存储对象。以块形式分配的 std::deque 将在内存方面更好地扩展为 no。元素增加。从缓存的角度来看,还有一些连续的元素会很有帮助。

另一种选择是使用 TBB 的 concurrent_bounded_queue。但是我没有足够的信息来知道将我的对象存储为值是否是一个可行的选择。

也欢迎任何其他建议。

解决方法

您可以将对象作为值存储在 tbb::concurrent_bounded_queue 中。 可以参考下面的示例代码实现。

#include <tbb/concurrent_queue.h>
#include <tbb/concurrent_priority_queue.h>
#include <iostream>
    static int value=0;
    static int obj_count=0;       // count of objects 
class Myclass{
    public:

    int myarray[10];
    Myclass()
    {
        for(int i=0;i<10;i++){
            myarray[i]=value++;   //initializing the values of myarray for each new object
        }
        
    }
void show()
{
    std::cout<< " Values of object "<< (++obj_count ) <<" are: ";
    for(int i=0;i<10;i++){
        std::cout<<myarray[i]<<" "; // printing the data values of myarray object
    }
    std::cout<<std::endl;
}   
};

int main()
{
    Myclass m[10];
    tbb::concurrent_bounded_queue<Myclass> queue;  // creatiing a concurrent_bounded_queue of type "Myclass"
    for(int i=0;i<10;++i){
        queue.try_push(m[i]);  //pushing each Myclass object into the concurrent_bounded_queue
    }
    for(int i=0;i<10;i++){
    Myclass val;
        if(queue.try_pop(val)) //pops it from the queue,assigns it to destination,and destroys the original value.
        {
        val.show(); //To print/access the data of myarray for each popped Myclass object.
        }   
        }
    std::cout<< std::endl;
    return 0;
}

编译和执行可以如这里所附的屏幕截图链接所示-->。 compilation and execution

希望对你有帮助。

谢谢, 桑托什

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?