0

我在 centos 目录 /home/is_admin/tbb40_233oss/ 中安装线程构建块(http://threadingbuildingblocks.org/ver.php?fid=174)

这是我的代码:

#include "tbb/concurrent_queue.h" 
#include <iostream> 
using namespace std; 
using namespace tbb; 
int main() { 
    concurrent_queue<int> queue; 
    for( int i=0; i<10; ++i ) 
        queue.push(i); 
    for( concurrent_queue<int>::const_iterator i(queue.begin()); 
i!=queue.end(); ++i ) 
        cout << *i << " "; 
    cout << endl; 
    return 0; 
}

我使用以下命令编译代码:

g++ test_concurrent_queue.cpp -I/home/is_admin/tbb40_233od/linux_intel64_gcc_cc4.1.2_libc2.5_kernel2.6.18_release -ltbb -o tcq

但它给出了这个错误:

class tbb::strict_ppl::concurrent_queue<int, tbb::cache_aligned_allocator<int> > has no member named begin

class tbb::strict_ppl::concurrent_queue<int, tbb::cache_aligned_allocator<int> > has no member named end

我不知道为什么?任何有tbb经验的人可以帮助我吗?

4

1 回答 1

2

编辑:

您使用的文档已过时,不再适用于concurrent_queue. 我的其余答案仍然有效。


因为concurrent_queue没有beginend方法: http ://threadingbuildingblocks.org/files/documentation/a00134.html

有一个unsafe_begin和一个unsafe_end方法,以这种方式命名,因为只有当您的队列没有被多个线程使用时才应该使用它们(也就是说,它们在多线程环境中使用是不安全的)。

遍历队列的一般方法是弹出元素直到它为空:

int i;
while(queue.try_pop(i)) // as long as you can pop, pop.
    cout << i << " "; 
于 2012-04-19T06:11:27.153 回答