Mi serve il parere di una persona che ne sa davvero, non capisco cosa sto sbagliando o comunque cosa sta succedendo. Volevo mettere un post su http://www.delphiedintorni.it ma oggi non funziona.
Ho un'applicazione multithread che tra le varie cose scrive su un file di testo ciò che accade. La procedura
che scrive sul file è sottoposta a CriticalSection di modo che i threads non aprano contemposaneamente il file di log insieme.
A volte capita (tipo una volta al mese) che un thread venga tenuto bloccato dalla CriticalSection a lungo, oggi addirittura per 20 minuti. Poi scrive ciò che deve e prosegue il suo lavoro come nulla fosse. Il fatto è che in quei 20 minuti comunque gli altri threads hanno eseguito la procedura correttamente per cui la CriticalSection non era bloccata ma è stato il thread a non accorgersi di quando la procedura si è liberata.
Può essere che il sistema operativo sospenda l'esecuzione di un thread quando è oberato di lavoro proprio quando il thread incontra una CriticalSection bloccata?
Io uso le CriticalSection così:
codice:...OnCreate() InitializeCriticalSection(TCSLog); ... procedure ..... begin EnterCriticalSection(TCSLog); ... ... LeaveCriticalSection(TCSLog); end;