Увеличить проблему shared_ptr с библиотеками TR1

class MyClass{
public:
  MyClass() {}
  virtual ~MyClass() {}
};

extern "C" int foo(int tryNumber)
{
    std::tr1::shared_ptr<MyClass> myClass(new MyClass());
    std::cout << "Object has been created " << tryNumber << << std::endl;
    return 0;
}

Тогда где-то в моей программе я пишу:

for (int i = 0; i < 10000; ++i){
    foo(i);
}

Есть факты:

1) gcc 4.0.1, и я пока не могу их обновить. Поэтому, когда я реализую std::tr1::shared_ptrЯ вижу компилятор использует boost / shared_ptr.hpp (boost 1.33.1)

2) Ну, программа использует много потоков, я даже не знаю, как они работают и что они делают полностью (большой проект на моей работе), но я знаю, что я не использую какие-либо общие переменные или что-то еще что может вызвать такое поведение

3) Иногда это просто печатает:

Объект создан 0

Объект был создан 1

...

Объект создан 9999

И все ок

Иногда он печатает 0-1-2-3-4 (или более) строк, а затем останавливается. Более того - я знаю, что объект был создан, но функция не вернула значение, и программа просто зависает, и когда я пытаюсь присоединиться к программе с помощью gdb и типа "где", я вижу это:

0) 0xb7fd8430 в __kernel_vsyscall ()

1) 0xb7d9bece в _lll_mutex_lock-wait() из /lib/i686/libpthread.so.0

2) 0xb7d98500 в _L_mutex_lock_71 () из /lib/i686/libpthread.so.0

3) 0xbfbefab8 в?? ()

4) 0x00000000 в?? ()

Или это:

0) 0xb7fd8430 в __kernel_vsyscall ()

1) 0xb7d9bece в _lll_mutex_lock-wait() из /lib/i686/libpthread.so.0

2) 0xb7d98500 в _L_mutex_lock_71 () из /lib/i686/libpthread.so.0

.. не знаю, что здесь, я вижу только " .. в?? ()"

10).. в __gthread_mutex_lock

11).. в __gthread_mutex_lock

12).. в std::tr1::_Sp_counting_base:: release

13).. в ~ shared_count

14).. в ~shared_ptr

Кажется это как shared_ptr сломано?

1 ответ

Я только что решил эту проблему. Изменено это:

#include <tr1/memory> в #include <boost/shared_ptr.hpp>

std::tr1::shared_ptr в boost::shared_ptr

Решение описано здесь ссылка

Другие вопросы по тегам