|
|
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь сталкивался такой с проблемой: есть минимум два потока, в каждом из них открыт свой std::ofstream и производится запись. В некоторый момент времени из глубин STL поднимается segmentation fault... Иногда это происходит при работе с basic_string и map. Я использую visual c++ 6.0 Помогите, плз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 09:52:21 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Объекты stl не потокозащищенные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 10:02:09 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Это я уже понял... а что делать-то? Может быть, есть какое-то вполне себе решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 10:11:04 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinothЭто я уже понял... а что делать-то? Может быть, есть какое-то вполне себе решение? Можно, например, защитить объекты атомаными флагами (мьютексками, критическими секциями). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 10:16:58 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
AkhМожно, например, защитить объекты атомаными флагами (мьютексками, критическими секциями). Мьютексы я использую на удалении/добавлении в контейнеры и т.п. Но, блин, если вешать мьютекс на каждую запись в файл, то эффективность многопоточности в моем проекте отпадает. У меня такое есть предположение, что проблема в выделении памяти при работе со строками. Стоит ли сделать свой thread-safe аллокатор, перекрывать new / delete ? Подскажите, есть ли на свете thread-safe опробованная библиотека для работы с контейнерами под linux и windows с STL-like вызовами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 11:09:12 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
[quot selinothНо, блин, если вешать мьютекс на каждую запись в файл, то эффективность многопоточности в моем проекте отпадает.[/quot] Что за беда ? Используй критические секции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 11:19:25 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Приведи конкретную ситуацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 11:20:41 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinoth Мьютексы я использую на удалении/добавлении в контейнеры и т.п. Но, блин, если вешать мьютекс на каждую запись в файл, то эффективность многопоточности в моем проекте отпадает. У меня такое есть предположение, что проблема в выделении памяти при работе со строками. Стоит ли сделать свой thread-safe аллокатор, перекрывать new / delete ? Подскажите, есть ли на свете thread-safe опробованная библиотека для работы с контейнерами под linux и windows с STL-like вызовами? Что-то мне не совсем понятно, ты пишешь из 2-х потоков в 1 открытый файл, или в 2 разных файла? Если пытаешься писать в один файл, не синхронизируя потоки, то непонятно что ты хочешь получить в этом файле. Если в разные файлы, то для каждого из них существует свой объект, и никакой проблемы с синхронизацией быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 11:24:09 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Защищать контейнер общего назначения дорого и неблагодарно, гораздо проще защитить прикладной объект, посторенный на основе контейнера STL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 11:26:50 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Sandro_KЧто-то мне не совсем понятно, ты пишешь из 2-х потоков в 1 открытый файл, или в 2 разных файла? Если пытаешься писать в один файл, не синхронизируя потоки, то непонятно что ты хочешь получить в этом файле. Если в разные файлы, то для каждого из них существует свой объект, и никакой проблемы с синхронизацией быть не должно. В два разных и проблема есть. Только что попробовал скомпилить на BCC32 - проблемы нет, а на m$ CL есть! от этого ацки грустно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 11:59:16 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
blindedЗащищать контейнер общего назначения дорого и неблагодарно, гораздо проще защитить прикладной объект, посторенный на основе контейнера STL Короче так, я сделал интерфейс для добавления/удаления различных объектов. Реализовал алгоритм так, чтобы он общался через этот интерфейс с хранилищем данных. На каждый метод реализации интерфейса навесил мьютексную лочку. В каждом потоке пишется свой собственный файл, выделяется память, указатели на новые объекты отдаются интерфесу (для сохранения и обработки). Валится то на записи, то на конструкторах новых объектов. Скомпилил на борландятине - проблемы нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 12:02:28 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Вот на что похож стэк фрейм при падении: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. здесь nx::State - конструктор нового класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 12:11:00 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Интересно, а почему ты сделал вывод что виноват STL, может ты сам развалил таблицу размещения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 12:41:13 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinoth blindedЗащищать контейнер общего назначения дорого и неблагодарно, гораздо проще защитить прикладной объект, посторенный на основе контейнера STL Короче так, я сделал интерфейс для добавления/удаления различных объектов. Реализовал алгоритм так, чтобы он общался через этот интерфейс с хранилищем данных. На каждый метод реализации интерфейса навесил мьютексную лочку. В каждом потоке пишется свой собственный файл, выделяется память, указатели на новые объекты отдаются интерфесу (для сохранения и обработки). Валится то на записи, то на конструкторах новых объектов. Скомпилил на борландятине - проблемы нет. Мало что понятно из такого описания. Если на каждый метод интерфейса делать по мутексу - тупик вероятен :). Стл-кие строки нормально создаются в разных потоках - вообще тут скорее всего дело не в стл, а в том как ты его используешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 12:48:22 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinoth пишет: > Кто-нибудь сталкивался такой с проблемой: есть минимум два потока, в > каждом из них открыт свой std::ofstream и производится запись. В > некоторый момент времени из глубин STL поднимается segmentation fault... Вы использовали multi-threaded C Run Time Library ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 14:01:00 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
IntserМало что понятно из такого описания. Если на каждый метод интерфейса делать по мутексу - тупик вероятен :). Стл-кие строки нормально создаются в разных потоках - вообще тут скорее всего дело не в стл, а в том как ты его используешь. Мутех один на все методы. Я не делаю ничего криминального: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 14:38:46 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
blindedИнтересно, а почему ты сделал вывод что виноват STL, может ты сам развалил таблицу размещения? 1. Обвал всегда в объектах STL 2. С одним потоком все прекрасно пашет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 14:40:09 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
MasterZiv Вы использовали multi-threaded C Run Time Library ? Опаньки... я первый раз слышу, что в M$ Visual C++ 6.0 можно выбирать тип run time library. Можно подробнее, как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 14:43:35 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinoth blindedИнтересно, а почему ты сделал вывод что виноват STL, может ты сам развалил таблицу размещения? 1. Обвал всегда в объектах STL 2. С одним потоком все прекрасно пашет Почти уговорил.Могут быть проблемы со стрингом, есть там гадости и сильные различия в реализациях. Но пока ничего не понятно. Код ты привел один, стэк совершеноо от другого куска... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 14:52:03 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinoth пишет: > Вы использовали multi-threaded C Run Time Library ? > Опаньки... я первый раз слышу, что в M$ Visual C++ 6.0 можно выбирать В настройках проекта. С/С++ / Code generation / Runtime Library. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2007, 15:11:08 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
Пашет! Спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 09:24:59 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinoth пишет: > Пашет! Спасибо всем! Так что было -то ? Поделись, не таи в себе ... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 10:02:59 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
MasterZivТак что было -то ? Поделись, не таи в себе ... Я думаю, что проблема с записью в поток и выделением памяти была именно в singlethreaded runtime library. По кр. мере если я сейчас переключаюсь на неё, то падения периодически происходят. Сделал класс мьютекс с Lock / Unlock и счетчиком, убрал прямые вызовы апишных функций, добавил семафор на случай отсутствия данных. Сейчас стабильно работает 12 часов. Короче, получилось как в анекдоте "пап, почему утром солнце встает а вечером садится... проверял? работает? тогда не трогай ради бога..." Займусь сравнением кода, если найду причину, то опишу здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 12:35:01 |
|
||
|
Валятся методы STL в многопоточном приложении.
|
|||
|---|---|---|---|
|
#18+
selinothКороче, получилось как в анекдоте "пап, почему утром солнце встает а вечером садится... проверял? работает? тогда не трогай ради бога..." Нееа, это как в ДРУГОМ анекдоте: "Ой, а чо эта она зажужжала ???" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2007, 13:07:42 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=276&tid=2028137]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 384ms |

| 0 / 0 |
