Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Отладка многопоточных приложений

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Порты завершения это имхо уже перебор для записи логов.  
Достаточно обернуть записи в лог критической секцией например

Ага, только когда два потока одновременно захотят записать в лог, один будет ждать другого, зачем тогда отдельный поток создавать, если все равно синхронная запись.

Цитата:
Я так понял этот способ работает только для Win200 и выше, у меня требования на работоспособность в 98 тоже  

Искренне жаль, а такой красивый способ.


----------
Хачу роботать каректором арфаграфии

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 08:24 07-09-2004
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
работоспособность в 98 тоже

98 - это не платформа для разработки/отладки.
Работоспособность можно обеспечить, но отлаживать на ней - это изврат.

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 12:10 07-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UncoNNecteD

Цитата:
98 - это не платформа для разработки/отладки.  
Работоспособность можно обеспечить, но отлаживать на ней - это изврат.

Да в общем так и делаем - отладка в хр, а в 98 просто проверка на работоспособность

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 13:11 07-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arion

Цитата:
Ага, только когда два потока одновременно захотят записать в лог, один будет ждать другого, зачем тогда отдельный поток создавать, если все равно синхронная запись.

А ты небось думаешь, что сможешь обойтись без синхронизации в ситуации с портами завершения.
хинт: PostQueuedCompletionStatus не дублирует данные, а просто запоминает переданный указатель
 
Если нужно обойтись без синхронизации, то каждый поток должен создавать отдельный лог файл.

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 23:21 07-09-2004
Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
хинт: PostQueuedCompletionStatus не дублирует данные, а просто запоминает переданный указатель  

Ну и что, достаточно передавать указатель на динамически выделенный буфер и освобождать его после записи лога.

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 10:35 08-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arion

Цитата:
динамически выделенный буфер

Внутри malloc-подобных функций обычно делается синхронизация для защиты внутренних структур heap'а. Если нет - тебе придется добавить ее самому.
 

Цитата:
и освобождать его после записи лога

Ага, т.е. вместо одной синхронизации ты предлагаешь делать две (одну при alloc, другую при free)

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 12:43 08-09-2004
Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не очень понял о какой синхронизации при free идет речь? Поток записи последовательно записывает в лог сообщения, ситуации когда возникает попытка освободить одновременно два буфера вообще возникнуть не может. Хотя в твоем рассуждении действительно есть зерно истины. Максимум что на это можно ответить, что задержка при синхронном доступе к памяти все же значительно меньше, чем при дисковых операциях. А если предполохить что запись лога ведется на дискету...

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 07:27 09-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arion

Цитата:
 А если предполохить что запись лога ведется на дискету...  

не стоит - там десятки мегабайт

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 10:30 09-09-2004
segeich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arion

Цитата:
Я не очень понял о какой синхронизации при free идет речь?

Я имел ввиду то, что синхронизация (вход-выход в критическую секцию) делается автоматом внутри malloc, free, и им подобным функциям, поскольку они работают с разделяемым ресурсом, heap'ом.
Ясен пень, что тебе не надо самому обёртывать вызов free синхронизацией. Но это вовсе не значит, что синхронизации нет.
 

Цитата:
попытка освободить одновременно два буфера вообще возникнуть не может

А free по барабану из скольких потоков её вызывают и может ли возникнуть проблема или нет. Синхронизируется делается всегда.
 
Хочешь иного - пиши свой собственный распределитель памяти, но минимум одна синхронизация всё равно останется.
 
WiseAlex

Цитата:
не стоит - там десятки мегабайт

Это потому что пишется много (но редко) или потому что мало (но часто)?
 
Возвращаясь к исходному вопросу

Цитата:
2)  
Может ли влиять на стабильность работы вывод в файл из разных потоков без использования синхронизирующих объектов, например  
cerr<<"something"; или SomeOutputStream<<"Something";

можно сказать, что, если выдача в лог ведется одним вызовом << или printf, то беспокоится ни за стабильность ни за корректность не стоит.
 
Если одно сообщение выводится несколькими вызовами, то корректность теряется.
 
Стабильность же есть всегда, поскольку операции вывода автоматом делают внутреннюю синхронизацию на буфер вывода.

Всего записей: 112 | Зарегистр. 03-01-2003 | Отправлено: 16:56 09-09-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
segeich

Цитата:
Это потому что пишется много (но редко) или потому что мало (но часто)?  

в один лог часто - тот который большой (пишется в одном потоке и проблем нет), в другой реже - небольшой (пишется из нескольких потоков)
 

Цитата:
Стабильность же есть всегда, поскольку операции вывода автоматом делают внутреннюю синхронизацию на буфер вывода.

собственно меня это всполне устраивает - многопоточный лог предназначен в основном для меня (разработчика), так что некоторая сбивчивость в строках (а в этом логе их не много) не пугает

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 19:24 09-09-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Отладка многопоточных приложений


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru