Если вы говорите об одном и том же файле для чтения / записи, то вам нужно использовать тот же критический раздел (как вы это сделали в настоящее время), иначе один поток мог бы читать файл, а другой поток записывал в него Это именно то, что вы используете, чтобы избежать критических разделов.
Однако, так как ваш класс FileWorker в настоящее время написан, вы можете читать / записывать произвольные файлы, но иметь один глобальный критический раздел. Это все еще работает в этом сценарии, но это приведет к дополнительным накладным расходам, если редко возникает конфликт для одного и того же файла. Это может быть приемлемым компромиссом для вас, в зависимости от ваших моделей использования и того, насколько критичен этот код по времени.
Кроме того, как указал Бегемот, у вас будут проблемы с одним глобальным критическим разделом, если вы создадите два FileWorkers с перекрывающимися временами жизни. Вам понадобится нечто похожее на то, что было предложено, чтобы убедиться, что вы не пытаетесь инициализировать критический раздел, который уже был инициализирован, или удалять уже удаленный.