Пишу многопоточное приложение, создаю массив объектов, у каждого объекта свой логин и пароль, плюс ещё пару настроек, объекты обращаются к одному и тому же файлу. Но я как понял, секция lock блокирует потоки, если они обращаются к одному объекту, посколько пишет что файл занят. Как можно решить данную проблему?
Если подразумевается монопольный доступ к файлу для каждого потока - то другого выхода кроме lock нету, в любом случаи все остальные варианты также будут вынуждать потоки крутить SpinWait в ожидании освобождения файла. Если потоков так много что lock вызывает большие простои можно пойти путем наименьших потерь - заключать в lock операции с минимум временем выполнения, например записывать данные не в файл а в объект а уже когда потоки отработают или будут находится в состоянии простоя записывать данные в файл(конечно при таком подходе будет сжираться виртуалка). В любом случаи можно воспользоваться архитектурными ухищрениями что бы снизить время простоя потоков в критической секции.
ну получается, что если я делаю не статический объект private object locker = new object(); и локаю lock(locker) { //Тут что надо сделать } то оно конфликтует с файлами, если же статику применяю, то всё нормально
лучше почитай теорию по потокам и оператору lock, а то ты хочешь непонятно что. хотя бы даже тут http://forum.antichat.ru/showthread.php?t=169454
да мне всё понятно, просто я хочу все возможные варианты знать, что бы к вопросу не обращаться и в запасе иметь не один приём. Вот.