![]() |
|
|
![]()
|
|
| null56 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Собственно проблема возникла в связи с тем, что возникли критические секции, в которых приходится обращаться к переменным типа QString.
Приведу пример кода, который хотелось бы обсудить
В стл, так же как и в qt полная перезапись происходит лишь в случае изменения в одной из ссылочных копий, то есть полного копирования не произойдет и в этом случае
Изменение происходит в функции
Да, в функциях изменения, мы не сможем из другого потока вернуть строку и наоборот, но мьютекс разблокируется в момент очистки стека, а в стеке у нас хранится ссылка на общий ресурс строки, который уже в этот момент может менять другой поток... Вопросы: 1) Как верно заставить отработать данные функции, чтобы при возврате из функции было достоверное значение, которое было в момент обращения или же механизм копирования по изменению, зная уже о наличии новой ссылке в стеке, сделает полную копию строки из потока вызывающего функцию set...? 2) Cуществует ли вариант принудительного копирования строки, не полагаясь на механизм копирования по изменению? Заранее благодарен за помощь всем откликнувшимся |
||||||
|
|||||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
null56, не забивай себе голову. Раньше у Qt с строками(и др подобными объектами) в многопоточном приложении были такие проблемы, сейчас(где-то начиная с Qt4) документация гарантирует корректное разруливание этих ситуаций без вмешательства пользователя, так что внешне строка выглядит и ведет себя точно так же, как будто бы этого shared механизма и не было бы.
|
|||
|
||||
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Наверное вы правы, но использование мьютекса для создание новой ссылки, я все думаю делать стоит... чтобы уж наверняка... остальное должен обеспечить Qt
Тогда прежде чем разблокировать доступ к строке, в стек поместится очереденая ссылка на строку и обращение на изменение, УЖЕ ПОСЛЕ разблокировки мьютекса, будет сначала копировать, а лишь потом изменять Спасибо, поэспериментировать все же надо ) |
||||
|
|||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |