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