|
|
|
Platov |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 155 Регистрация: 23.7.2009 Репутация: 2 Всего: 2 |
Всем привет! Ребята, помогите мне глупому.
Пишу многопоточное приложение потоки создаются часто и по многу. Валится зараза в самых непредвиденных местах. Грешу на AnsiString. От передачи AnsiString в потоки я отказался. Передаю масивы char. Но между функциями передаю и возвращяю AnsiString. Внутри функций использую тоже его. Может быть проблема из-за этого? Хотел переписать всё на std:: но он похоже тоже не на много лучше. Посоветуйте пожалуйста как работать со строками (и с какими) в многопоточных приложениях. ps и вообще мне не понятно зачем придумывают ansistring и unicodestring если с ними нельзя работать |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Я когда опасался за счетчик ссылок, то пользовал комовскую строку WideString . Есть еще метод Unique для того чтобы сделать счетчик ссылок на строку равным единице.
Жаль что не придумали еще кнопку "Сделать все хорошо". Многопоточная работа не так тривиальна, чтобы ее автоматизировать. Следить нужно за тем что делаешь. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Platov |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 155 Регистрация: 23.7.2009 Репутация: 2 Всего: 2 |
Кажется нашёл причину. В потоках читал константу AnsiString. Это было единственное обращение к глобальной переменной, без критической секции. То что писать надо в критической секции - это мне понятно но почему при чтении ошибки?
|
|||
|
||||
Dem_max |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Ну пока что телепаты в отпуске, а мы не можем предугадать как ты там работаешь со строками.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
Alexeis |
|
|||
Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Само по себе чтение потокобезопасно, но может получиться потоконебезопасная логика основная на чтении. Например есть 2 потока A и B. Оба выгребают данные из буфера. Буфер исчерпался настолько, что можно опустошить за одну итерацию. Оба потока почти одновременно прочитали количество оставшихся элементов. И оба поняли, что есть что выгребать, однако поток A успел раньше, он заблокировал ресурс на запись и опустошил, после чего записал, что буфер пуст, но вот поток B продолжает думать, что данные еще есть, ведь чтение потокобезопасно, поэтому ему не запрещали читать состояние. Ресурс разблокирован и он лезет опустошать буфер и выходит за границы пытаясь вычесть несуществующие элементы. Так потокобезопасное чтение + потокобезопасная запись на пару могут оказаться не потокобезопасными. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Platov |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 155 Регистрация: 23.7.2009 Репутация: 2 Всего: 2 |
Alexeis, Спасибо большое!
|
|||
|
||||
xvr |
|
||||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Как именно читал? Если так -
|
||||
|
|||||
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |