boost::shared и потоки
От: gpepsi  
Дата: 11.06.10 13:16
Оценка:
у меня есть объект boost::shared_ptr
Создается объект, которому передается weak_ptr

Оба объекта запускают потоки. Один напрямую обращается к shared_ptr, а второй через weak_ptr.lock
Потоки не синхронизированы.

В один прекрасный момент происходит access volation
Отладчик показывает, что проблема с deleter у shared_ptr, но объект гарантированно не удаляется в этот момент.

Может ли быть проблема со счетчиком ссылок, которого в какой-то момент переклинивает и он пытается грохнуть объект,
а второй поток на этом спотыкается ?

З.Ы. Если да, то можно небольшой пример для демонстрации, а то я так и не могу отловить этот момент.
Re: boost::shared и потоки
От: Диоксин Украина  
Дата: 11.06.10 13:50
Оценка:
Здравствуйте, gpepsi, Вы писали:

G>у меня есть объект boost::shared_ptr

G>Создается объект, которому передается weak_ptr

G>Оба объекта запускают потоки. Один напрямую обращается к shared_ptr, а второй через weak_ptr.lock

G>Потоки не синхронизированы.

G>В один прекрасный момент происходит access volation

G>Отладчик показывает, что проблема с deleter у shared_ptr, но объект гарантированно не удаляется в этот момент.

G>Может ли быть проблема со счетчиком ссылок, которого в какой-то момент переклинивает и он пытается грохнуть объект,

G>а второй поток на этом спотыкается ?

G>З.Ы. Если да, то можно небольшой пример для демонстрации, а то я так и не могу отловить этот момент.


Так может попытаться синхронизировать доступ потоков к shared_ptr?
Re: boost::shared и потоки
От: uzhas Ниоткуда  
Дата: 11.06.10 15:31
Оценка:
Здравствуйте, gpepsi, Вы писали:

G>Может ли быть проблема со счетчиком ссылок, которого в какой-то момент переклинивает и он пытается грохнуть объект,

G>а второй поток на этом спотыкается ?

проблем быть не должно, если в разных потоках идет работа с разными smart pointer-ами (которые могут указывать на один объект)
приведите пример кода
Re[2]: boost::shared и потоки
От: gpepsi  
Дата: 11.06.10 17:25
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, gpepsi, Вы писали:


G>>Может ли быть проблема со счетчиком ссылок, которого в какой-то момент переклинивает и он пытается грохнуть объект,

G>>а второй поток на этом спотыкается ?

U>проблем быть не должно, если в разных потоках идет работа с разными smart pointer-ами (которые могут указывать на один объект)

U>приведите пример кода

Вот и я про тоже. Попробую побрякать на деструкторах...
Re[2]: boost::shared и потоки
От: gpepsi  
Дата: 11.06.10 17:32
Оценка:
Здравствуйте, Диоксин, Вы писали:

Д>Здравствуйте, gpepsi, Вы писали:


G>>у меня есть объект boost::shared_ptr

G>>Создается объект, которому передается weak_ptr

G>>Оба объекта запускают потоки. Один напрямую обращается к shared_ptr, а второй через weak_ptr.lock

G>>Потоки не синхронизированы.

G>>В один прекрасный момент происходит access volation

G>>Отладчик показывает, что проблема с deleter у shared_ptr, но объект гарантированно не удаляется в этот момент.

G>>Может ли быть проблема со счетчиком ссылок, которого в какой-то момент переклинивает и он пытается грохнуть объект,

G>>а второй поток на этом спотыкается ?

G>>З.Ы. Если да, то можно небольшой пример для демонстрации, а то я так и не могу отловить этот момент.


Д>Так может попытаться синхронизировать доступ потоков к shared_ptr?


Так я сначала хочу понять — нужно ли это вообще. Тоесть есть ли какой фокус с подсчетом ссылок ?
Re: boost::shared и потоки
От: ArtDenis Россия  
Дата: 12.06.10 16:35
Оценка:
Здравствуйте, gpepsi, Вы писали:

G>В один прекрасный момент происходит access volation


Если выполняются все условия, указанные в доках в разделе shared_ptr про многопоточность, то вероятно что проблема не в shared_ptr
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.