我在TBB 论坛上问过这个问题,但我希望这里的人可能有一些额外的想法。我正在调试我们看到的一个问题,并注意到来自tbb::concurrent_vector.  
底线是push_back()调用实际完成后,size()的concurrent_vector并没有反映这一点。我已将其范围缩小为与容量相关,因为如果我捕获capacity()and size(),size() == capacity() => true这使我相信size()返回的是容量而不是元素的实际数量。
我创建了一个简单的程序来复制这个问题,它最常在向量为空时触发。为简单起见,该程序只是在调用返回size() != 0后立即断言。push_back()我希望有人能告诉我这是预期的行为还是错误。
#include <boost/thread.hpp>
#include <tbb/concurrent_vector.h>
typedef tbb::concurrent_vector<int> vec_type;
void invokePushBack(vec_type * vec)
{
    for(int i = 0 ; i < 10 ; ++i)
    {
        vec_type::iterator it = vec->push_back(1);
        assert(vec->size() != 0);
    }
}
int main()
{
    // note: the race condition doesn't always trigger,
    //       so we loop until it does.
    while(true)
    {
        vec_type vec;
        boost::thread_group tg;
        for(int i = 0 ; i < 5 ; ++i)
            tg.create_thread(boost::bind(invokePushBack, &vec));
        tg.join_all();
    }
}
根据他们的参考手册:
push_back() "将值的副本附加到向量的末尾。"
和
size() 返回“向量中的元素数。结果可能包括已分配但仍在通过并发调用任何增长方法 (5.6.3) 构建的元素。”
基于此,我认为至少size()应该体现一次回报。push_back()push_back()