将shared_array传递给另一个线程

时间:2015-10-01 18:13:02

标签: c++ multithreading boost shared-ptr smart-pointers

对于boost :: shared_array来说,这是一个问题。我需要分配一个数组并将其传递给另一个线程来处理其数据,然后删除数组。 我无法理解下面的情况会发生什么:

void deletePtr(boost::shared_array<char> ptr)
{
    std::cout <<"c3= " <<ptr.use_count() << std::endl;
    ptr.reset();    
}
int main()
{
    int i = 0;
    while (i < 3)
    {

       char* a = new char[3]{'3','2','1'};
       boost::shared_array<char> ptr(a);
       std::cout << "c1= " << ptr.use_count() << std::endl;
       boost::thread t(boost::bind(deletePtr, ptr));
       std::cout <<"c2= " <<ptr.use_count() << std::endl;
       i++;
    }   
    return 0;
}

我得到了:c1 = 1,c2 = 2,c3 = 3

c1和c2的结果是我的预期,但c3应该是1,所以两个额外的所有者来自哪里? 谢谢你的帮助

0 个答案:

没有答案