Уважаемые, встал в тупик и не знаю что делать, подскажите плз:
Есть задача: многопоточная обработка данных. В частности: необходимо многопоточно анализировать веб страницы. С этих страниц мы выдираем ссылки и их анализируем и т.д.
Как мне это видится:
1. Есть поток, который занимается только скачиванием страницы в нужное место для последующего поиска. По завершению потока выполняется некая функция OnFinishThread,
2. Есть некая функция PushPage(address), которая добавляет страницу в общий список, присваивает странице address состояние типа NEED_DOWNLOAD и все, больше она ничего не делает.
3. Есть некая функция Update, которая просматривает список страниц и для каждой страницы со статусом NEED_DOWNLOAD запускает тот самый поток
4. Функция OnFinishThread берет ту страницу, которую скачал соотв. вызывающий поток, и вызывает функцию ParsePage, которая на каждый найденный урл вызовет соотв. PushAddress и т.д.
Соотв. функция Update циклическая и все скачивается, анализируется и т.д.
Вопрос: с точки зрения многопоточности критичная для нас функция OnFinishThread, т.к. ее могут вызвать сразу несколько потоков одновременно, прально? Соотв. делаем, например, так:
void OnFinishThread(Tthread *Thread)
{
EnterCriticalSection(&CS);
try
{
if (Locker > 0) throw Exception("Херня, залезло слишком много потоков одновременно

");
++Locker;
try
{
ParsePage(Thread->Page);
}__finally
{
--Locker;
};
}__finally
{
LeaveCriticalSection(&CS);
};
};
Подобный вариант НЕ РАБОТАЕТ

((
Как подобное лучше сделать?!