У меня есть сервисное приложение, написанное на Delphi 10 Seattle Win32, в котором есть данные в памяти, которые регулярно обновляются в потоке.
Поскольку данные представляют собой сложную структуру и принимаются в виде кусков, код обновления записывает во временный список, а когда он завершает структуру, переключает этот временный список в «производственный» список, который читается многими потоками читателей.
Я считал код «переключателя» критическим разделом вместе с соответствующими читателями, чтобы они взаимно исключались. Позже я понял, что в качестве побочного эффекта потоки читателя также являются взаимоисключающими.
У меня вопрос, есть ли альтернативный класс критической секции, который я могу охарактеризовать как читатель или писатель, чтобы позволить читателям выполнять одновременно.
Кроме того, я защитил только код считывателя, который собирает данные, которые он должен отправить, и делает копии этих данных для отправки после выхода из критического раздела. Интересно, должно ли быть более производительным, чтобы этот код сбора данных в любом случае был взаимоисключающим или сериализованным.
Заранее спасибо.