Обобщения Delphi только для чтения, такие как TDictionary<T> и TList<T>, являются потокобезопасными?

Могу ли я добавить элементы в общий список или словарь только при инициализации модуля, а затем использовать его только для чтения для нескольких потоков?

Я прочитал в теме, которая TList<T> является потокобезопасным и в другой теме, которая TDictionary<T> не является. Какая разница между ними?

1 ответ

Чтение безопасно, а написание - нет. Пока вы можете обеспечить TList/TDictionary заполняется до того, как к нему обращаются какие-либо потоки, и вы только извлекаете элементы, но не добавляете и не изменяете элементы, тогда это безопасно. Однако лучше не полагаться на такое поведение. Вы всегда должны быть явными при синхронизации доступа к общим ресурсам между потоками, например, с TCriticalSection, TMutex, TMREWSync (или блокировки Win32 SRW), TMonitor, так далее.

Другие вопросы по тегам