Почему эта tbb-программа не компилируется?

Я устанавливаю строительные блоки потоковой передачи (http://threadingbuildingblocks.org/ver.php?fid=174) в centos в каталоге / home / is_admin / tbb40_233oss ​​/

Это мой код:

#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, может мне помочь?


person Treper    schedule 19.04.2012    source источник


Ответы (1)


РЕДАКТИРОВАТЬ:

Используемая вами документация устарела и больше не работает с concurrent_queue. Остальная часть моего ответа все еще в силе.


Поскольку concurrent_queue не имеет метода begin или end: 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 << " "; 
person Etienne de Martel    schedule 19.04.2012
comment
Вы имеете в виду, что я должен использовать concurrent_bounded_queue? Этот код является примером кода threadingbuildingblocks.org cache-www.intel.com/cd/00/00/30/11/301114_301114.pdf#page=61 - person Treper; 19.04.2012
comment
Хм, я мог что-то упустить. Ответ, который я дал, был для tbb::strict_ppl::concurrent_queue, что, по мнению вашего компилятора, concurrent_queue. Похоже, есть еще один concurrent_queue класс с другим интерфейсом. - person Etienne de Martel; 19.04.2012
comment
@Greper: Документ, на который вы ссылаетесь, относится к 2007 году. Более новую документацию можно найти здесь. - person Jesse Good; 19.04.2012
comment
@Jesse Да, я предполагал, что он использовал устаревшую документацию. - person Etienne de Martel; 19.04.2012