У меня есть класс Singleton с именем FILELOGGER
и свойство, называемое number_of_lines. Я уверен, что только один объект может создать для класса FILELOGGER
, который делает singleton.Singleton в многопоточной среде
В моем приложении мой объект может записать его в файл и обновить свойство number_of_lines
для каждой записи.
Что делать, если я использую этот шаблон дизайна в многопоточной среде. Как он себя ведет, и я чувствую, что свойство number_of_lines
должно быть заблокировано, когда другие потоки пытаются обновить. И я могу потерять регистрацию данных с задержкой, и производительность будет терять.
Скажем, например, поток T1
регистрируется в момент 10:10:10, а T2
также регистрируется в то же точное время и обе пытается обновить свойство number_of_lines
.
Как решить эту проблему? Есть ли альтернативный шаблон проектирования, чтобы решить эту проблему. Спасибо за ваше время.
«Как он себя ведет, и я чувствую, что свойство number_of_lines должно блокироваться, когда другие потоки пытаются обновить, и я могу потерять регистрацию данных с задержкой, и производительность будет терять». не знаю, что вы здесь имеете в виду. Но я думаю, вам нужно заблокировать функцию 'writeToFile' (или ваш файл будет испорчен) и поле' number_of_lines', чтобы сделать значение атомарным. –
есть. если я заблокирую как writeToFile, так и поле number_of_lines. я закончу с потерей производительности, поскольку другие операции записи будут ждать в очереди и не смогут регистрироваться в точное время – sanjayzed
OK Я дам вам 2 решения: 1. укажите время в сообщении. 2. Напишите несколько файлов. (потеря не теряется) –