为什么这个tbb程序无法编译?

时间:2012-04-19 06:09:21

标签: c++ multithreading thread-safety queue tbb

我在目录/ home / is_admin / tbb40_233oss /

中的centos中安装了线程构建块(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经验可以帮助我吗?

1 个答案:

答案 0 :(得分: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 << " ";