crossplatform.ru

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

> Синхронизация при сигналах и слотах в разных потоках
Алексей1153
  опции профиля:
сообщение 22.1.2013, 12:59
Сообщение #1


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  



Вопрос: когда сигнал и слот имеют аргументы по значению (то есть, не указатели и не ссылки), нужно ли выполнять межпоточную синхронизацию, если я из одного потока шлю сигнал в слот другого?

Понимаю, что глупый вопрос, поэтому задам его по-другому: в каких случаях при использовании сигнала в одном потоке и слота в другом требуется синхронизация ?

Ситуация простейшая - передаю, к примеру, QString по значению из потока в поток

Сообщение отредактировал Алексей1153 - 23.1.2013, 8:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Авварон
  опции профиля:
сообщение 24.1.2013, 22:04
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 99
Регистрация: 26.4.2009
Пользователь №: 709

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




Репутация:   0  


iReset
Всё там у QString нормально. У шаред классов атомарно копирование - при передаче строки в поток мы получаем 2 копии с рефкаунтом 2.
При попытке изменить строку делается detach() - если счетчик ссылок больше 2х, то создается новая дата, туда копируется содержимое (заметь, это всё обращения на чтение), затем делается deref() оригиналу и только после этого идет изменение строки.
Самое плохое, что может случиться - это если 2 потока сделают детач() "одновременно" - тогда будет создано еще 2 копии, а исходник будет уничтожен при deref() той строки, что закончила detach() последней. Но эта ситуация достаточно маловероятна и чревата только падениями производительности.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Алексей1153   Синхронизация при сигналах и слотах в разных потоках   22.1.2013, 12:59
- - Litkevich Yuriy   если по значению, то передаваемая величина просто ...   23.1.2013, 3:46
- - Алексей1153   то есть, если в параметрах нет ссылок и указателей...   23.1.2013, 8:24
- - ssoft   1. Если передача параметров происходит по значению...   24.1.2013, 9:01
|- - iReset   Цитата(ssoft @ 24.1.2013, 10:01) 1. Если ...   24.1.2013, 9:40
- - Алексей1153   ssoft, вот я именно про случай без ссылок. Я в дет...   24.1.2013, 9:12
- - Алексей1153   выходит, если указать Qt::QueuedConnection , то а...   24.1.2013, 9:57
|- - iReset   Цитата(Алексей1153 @ 24.1.2013, 10:57) вы...   24.1.2013, 10:40
- - Алексей1153   с циклом - понятно, ок Ну, видимо, класс потока с...   24.1.2013, 10:42
- - Авварон   iReset Всё там у QString нормально. У шаред классо...   24.1.2013, 22:04
|- - iReset   Цитата(Авварон @ 24.1.2013, 23:04) Всё та...   25.1.2013, 8:45
- - Авварон   Лень в доку лезть, а какие ф-ии у QString нереентр...   25.1.2013, 9:28
- - Алексей1153   Авварон, он, наверное, имел в виду не QString, а ю...   25.1.2013, 11:28
- - iReset   http://www.doc.crossplatform.ru/qt/4.7.x/qstring.h...   25.1.2013, 12:38
- - Авварон   Прикольно, даже не знал, что такие есть, всегда ис...   25.1.2013, 17:38


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


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




RSS Текстовая версия Сейчас: 25.11.2024, 15:34