Показать сообщение отдельно
Старый 22.08.2011, 14:51   #6
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

etoken, в смысле в коде моего входа в крит секцию пытаться войти в крит секции других объектов для проверки занятости, например:

bool MyInterCritSect()
{
if (TryEnterCriticalSection(cs2))//проверяем не занята ли крит секция второго объекта
{//если нет
LeaveCriticalSection(cs2);
EnterCriticalSection()cs1);
return true;
}
else
{//если да
ShowMessage("Возможно блокирование ищите ошибку в логике программы");
return(false);
}
}


"Лупится" - это загрузит систему, если вызывать Sleep() то затормозит программу


Вот что по этому поводу пишет некий Oraizer

"Я считаю TryEnterCriticalSection() вообще бесполезной. Идеология критических секций такова, что они призваны защищать инварианты структур данных в пределах одного приложения в предположении, что нарушения инвариантов кратковременны, а значит коллизии случаются редко. Критические секции в отличие от мьютексов очень легки, приложение может их использовать сотнями, тысячами и больше, не особо нагружая систему. Отсюда и некоторые их ограничения, в частности отсутствие таймаутов, невозможность комбинировать их с другими объектами синхронизации и неопределённость поведения системы при несоблюдении правил обращения с ними. В таких исходных условиях TryEnterCriticalSection() может быть полезна в единственном случае - попробовать захватить и отказаться выполнять запрошенное действие в случае неудачи. Ни разу не припомню, чтобы мне понадобился такой сценарий. Всё остальное от лукавого, критические секции в других условиях эксплуатации просто вряд ли вообще подходят.
Средством защиты от deadlocks является отладка. Их просто не должно быть. Обходные пути в лице нарушенных инвариантов - это ещё большее зло."

Источник

Добавлено через 5 минут
Цитата:
Сообщение от etoken Посмотреть сообщение
А так Тряй вам поможет с:
"Если бы иметь возможность внутри этих функций мониторить состояние крит секций других моих объектов я мог бы хотя бы определить где и что привело к блокировке." ))
Как мне поможет Try? Изменить глобальное время ожидания входа в крит секцию в системе InitializeCriticalSectionAndSpinCount() и при исключении долгого ожидания искать ошибки в программе?
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)

Последний раз редактировалось Yegor, 22.08.2011 в 14:53. Причина: Добавлено сообщение
Yegor вне форума   Ответить с цитированием