Код:
procedure TMyThread.Execute;
begin
while not Terminated do begin
CriticalSection.Enter;
Synchronize(Work);
CriticalSection.Leave;
Sleep(1000);
end;
end;
Ошибка в том, что какой-то поток, захватив критическую секцию, крутится, пока не завершится приложение, а его напарник не получает шанса на исполнение (Sleep поставлен только для наглядности). Ну и с логикой чтения-записи как-то не совсем понятно...