Здравствуйте, Slava Antonov, Вы писали:
SA>Hello HAS, you wrote:
>> Вопрос: с точки зрения многопоточности критичная для нас функция OnFinishThread, т.к. ее могут вызвать сразу несколько потоков одновременно, прально? Соотв. делаем, например, так:
>>
>> void OnFinishThread(Tthread *Thread)
>> {
>> EnterCriticalSection(&CS);
>> try
>> {
>> if (Locker > 0) throw Exception("Херня, залезло слишком много потоков одновременно
");
SA>Данная проверка бессмысленна, т.к. EnterCriticalSection ГАРАНТИРУЕТ, что данный блок выполняется только одним потоком.
тогда почему срабатывает данное исключение?
SA>Что не работает?
вроде как работает, но: один раз может отработать без задоринки, в другой раз может просто выдать "out of memory", в третий — подвиснуть... причем пытался уже статически задавать последовательность страниц, та же история...
SA>Кроме того, критическую секцию нужно ставить не на всю функцию, а только на те места где идет обращение в разделяемым ресурсам, т.е. ресурсам к котором возможен доступ из нескольких потоков.
а как быть если мне необходимо, чтобы весь этот блок кода был выполнен без прерывания одним потоком, т.е. чтобы в этом блоке в ходе выполнения не было переключения между потоками?
SA>--
SA>Всего хорошего, Слава
SA>ICQ: 197577902