QSharedPointer и многопоточность |
Здравствуйте, гость ( Вход | Регистрация )
QSharedPointer и многопоточность |
hoRUS |
29.9.2011, 12:58
Сообщение
#1
|
Студент Группа: Участник Сообщений: 30 Регистрация: 10.7.2008 Из: Москва Пользователь №: 231 Спасибо сказали: 5 раз(а) Репутация: 0 |
Привет всем.
Может кто подробно исследовал поведение "умного указателя" QSharedPointer в условиях многопоточности. В документации написано, что доступ к значению указателя, но не к объекту, на который указатель указывает. При этом разные потоки могут одновременно обращаться к QSharedPointer, указывающим на один и тот же объект без явного применения механизмов синхронизации. Но что будет, если, например, один из потоков удалит объект, на который указывает QSharedPointer, в то время, пока один из методов этого удалённого объекта выполняется в другом потоке? Например, скажет QSharedPointer::clear(), и так получится, что счетчик ссылок в объекте QSharedPointer обнулится и по идее объект, на кот. указывает умный указатель должен удалиться. Допустим, например, есть некоторый общий для нескольких потоков объект, в классе которого (допустим, LongFunctionWrapper) определена некоторая долгая функция (например longFunction()), выполняемая в одном из потоков. Пусть класс LongFunctionWrapper потокобезопасен, - это не суть. Допустим, на этот объект указывает указатель
и счетчик ссылок у pLongFunctionWrapper равен 1. Пусть один из потоков запускает pLongFunctionWrapper -> longFunction();, а другой в это время говорит pLongFunctionWrapper.clear(); . Досчитает ли до конца первый поток долгую функцию? Вроде бы не противоречит документации - объект удаляется указателем. Может кто-то сталкивался с проблемой и протестировал ситуацию? |
|
|
Текстовая версия | Сейчас: 23.11.2024, 9:53 |