Timid » 14.07.2010 18:36:34
Что ж тут неясного, доступ запрещен. А остальное - это можете только вы сами в дебагере отыскать.
Скорее всего, Вы просто не понимаете принцип использования критических секций.
Есть очень хорошая статья на "Королевстве", почитайте.
Но если коротко, то критическая секция формируется через обращение к ячейке, для которой операция "проверка значения и запись при нулевом значении" будет атомарна - то есть неразделима в многопроцессной среде.
Фактически, это как железнодорожная стрелка - все подошли с разных сторон, если стрелка свободна, то дергают к себе. Кто-то был первым, стрелка включается к нему. Он свободно "входит в секцию" и делает свои дела. Когда выходит - стрелка освобождается. Кто-то другой может включить на себя.
Пока стрелка занята, все подошедшие регулярно дергают рычаг стрелки на себя и ждут.
Проблема в том, что фактически такое включение - две операции - проверка состояния флага и его установка. Если атомарности не будет, то два процесса могут проверить флаг, а затем его установить одновременно. И войти в критическую секцию вместе. А сам код внутри критической секции будет, скорее всего, очень критичен к "однопоточности".
Прочитайте статью на "Королевстве Дельфи" и постройте для себя схему работы Ваших потоков - наверное где-то у Вас есть лишний выход из секции или ее удаление из памяти без освобождения, либо вход в секцию без создания...