Глюк в Delphi с потоками

JackVlg
Дата: 26.11.2007 13:05:49
Короче обнаружил хитрую штуку в Delphi .

Сделал пул потоков, и выполняю различные действия через них. Когда работа завершается, делаю потоку suspend. Когда нужно что-то выполнить, ищу suspended поток в массиве, если нахожу, присваиваю ссылку на метод выполнения и делаю resume.

На однопроцессорных тачках глюков не замечено, а на некоторых многопроцессорных suspend/resume отрабатывают нормально, а вот метод suspended иногда возвращает FALSE в то время, когда поток на самом деле приостановлен.

Ловил глюк неделю на 26 серверах по 4/8 процессоров на каждом. Проявлялось только на 4-х серверах.

Как только поставил свой флажок running, при resume ставил в true, при suspend ставил false и проверял только его, то все сразу заработало нормально.

Так-что будьте бдительны!
JackVlg
Дата: 26.11.2007 13:07:51
Про синхронизацию можете не писать, все управление потоками было синхронизировано критическими секциями!
OracleX
Дата: 26.11.2007 13:15:33
Наш человек!