crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSharedPointer и многопоточность
hoRUS
  опции профиля:
сообщение 29.9.2011, 12:58
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 10.7.2008
Из: Москва
Пользователь №: 231

Спасибо сказали: 5 раз(а)




Репутация:   0  


Привет всем.
Может кто подробно исследовал поведение "умного указателя" QSharedPointer в условиях многопоточности. В документации написано, что доступ к значению указателя, но не к объекту, на который указатель указывает. При этом разные потоки могут одновременно обращаться к QSharedPointer, указывающим на один и тот же объект без явного применения механизмов синхронизации. Но что будет, если, например, один из потоков удалит объект, на который указывает QSharedPointer, в то время, пока один из методов этого удалённого объекта выполняется в другом потоке? Например, скажет QSharedPointer::clear(), и так получится, что счетчик ссылок в объекте QSharedPointer обнулится и по идее объект, на кот. указывает умный указатель должен удалиться.

Допустим, например, есть некоторый общий для нескольких потоков объект, в классе которого (допустим, LongFunctionWrapper) определена некоторая долгая функция (например longFunction()), выполняемая в одном из потоков. Пусть класс LongFunctionWrapper потокобезопасен, - это не суть. Допустим, на этот объект указывает указатель
QSharedPointer<LongFunctionWrapper> pLongFunctionWrapper;

и счетчик ссылок у pLongFunctionWrapper равен 1.
Пусть один из потоков запускает pLongFunctionWrapper -> longFunction();, а другой в это время говорит pLongFunctionWrapper.clear(); . Досчитает ли до конца первый поток долгую функцию? Вроде бы не противоречит документации - объект удаляется указателем.
Может кто-то сталкивался с проблемой и протестировал ситуацию?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 6:02