Синхронизация в C#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by IgrikX, 12 Feb 2011.

  1. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    Пишу многопоточное приложение, создаю массив объектов, у каждого объекта свой логин и пароль, плюс ещё пару настроек, объекты обращаются к одному и тому же файлу. Но я как понял, секция lock блокирует потоки, если они обращаются к одному объекту, посколько пишет что файл занят. Как можно решить данную проблему?
     
  2. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    ок! прпробую, ещё какие есть решения?
     
  3. PaCo

    PaCo Elder - Старейшина

    Joined:
    6 Feb 2008
    Messages:
    436
    Likes Received:
    138
    Reputations:
    25
    Если подразумевается монопольный доступ к файлу для каждого потока - то другого выхода кроме lock нету, в любом случаи все остальные варианты также будут вынуждать потоки крутить SpinWait в ожидании освобождения файла. Если потоков так много что lock вызывает большие простои можно пойти путем наименьших потерь - заключать в lock операции с минимум временем выполнения, например записывать данные не в файл а в объект а уже когда потоки отработают или будут находится в состоянии простоя записывать данные в файл(конечно при таком подходе будет сжираться виртуалка). В любом случаи можно воспользоваться архитектурными ухищрениями что бы снизить время простоя потоков в критической секции.
     
  4. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    ну получается, что если я делаю не статический объект
    private object locker = new object();
    и локаю
    lock(locker)
    {
    //Тут что надо сделать
    }
    то оно конфликтует с файлами, если же статику применяю, то всё нормально
     
  5. zORG

    zORG New Member

    Joined:
    5 Jun 2010
    Messages:
    44
    Likes Received:
    2
    Reputations:
    0
  6. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    да мне всё понятно, просто я хочу все возможные варианты знать, что бы к вопросу не обращаться и в запасе иметь не один приём. Вот.
     
  7. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    ReaderWriterLockerSlim
     
  8. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Ты не знаешь разницу между статическими полями и полями экземпляра?
     
  9. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    знаю, просто статическое всёровно не помогает, иногда пишет что файл занят другим процессом
     
  10. Irdis

    Irdis Elder - Старейшина

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    код в студию...
    статика в этом случае правильное решение, но видимо вы не правильно его реализовали
     
  11. IgrikX

    IgrikX New Member

    Joined:
    13 Aug 2009
    Messages:
    114
    Likes Received:
    1
    Reputations:
    -3
    сейчас уже всё ок, в чём тогда трабла была хз..