четверг, 26 июня 2014 г.

Смешно. По мотивам...

Смешно. По мотивам...

Задавал тут вопрос - http://programmingmindstream.blogspot.ru/2014/06/blog-post_18.html

Знаете что я выяснил в последующее время?

Это то, что aPipe - НАДО защищать.

Но!

Не НА СЕРВЕРЕ.

А НА КЛИЕНТЕ!

Интересно как?

3 комментария:

  1. «Это то, что aPipe - НАДО защищать.
    Но!
    Не НА СЕРВЕРЕ.
    А НА КЛИЕНТЕ!»

    -- Пока не понятно, что Вы подразумеваете под сервером, а что под клиентом...
    Вероятно, Вы имеете ввиду, что "защиту" aPipe невозможно расположить в реализации этого класса (что было бы неудивительно) - но Вы сообщили слишком мало, чтобы что-то утверждать на этот счёт.
    Интересна фабула, прецеденты использования aPipe. Словом, тот контекст, о котором я говорил ранее...

    ОтветитьУдалить
    Ответы
    1. Рассказать про проблемы?

      Вот оно что:

      Клиентское приложение имеет коннекцию к серверу.

      И в результате "разговора" по этой коннекции что-то происходит на сервере (и на клиенте).

      В итоге сервер отсылает клиенту нотификацию, которую клиент обрабатывает в ДРУГОМ потоке.

      Клиент принимает эту нотификацию и пытается "начать разговор" с сервером, по тому же порту.

      И в итоге ловит ошибку "коннекция уже открыта".

      Это когда я убрал критические секции на сервере.

      Потому что через эти критические секции и КЛИЕНТЫ были синхронизированы (как нетрудно догадаться).

      Когда же я защитил коннекции критическими секциями на клиенте - всё стало хорошо. Что и понятно.

      Осталось разобраться с одним - "а почему только одна коннекция возможна".

      Удалить
    2. И "к чему я это всё"? А к тому, что надо ПОНИМАТЬ - КАКИЕ ресурсы защищают критические секции, а не просто "рассыпать их по коду" в надежде на то, что "всё в итоге заведётся".

      Заведётся...

      Но есть ДРУГОЙ момент - dead-lock'и.

      Вообще говоря - на основе этого опыта я УЖЕ хочу написать пост "как правильно защищать ресурсы и ЗАЧЕМ", только я пока не подобрал ПОКАЗАТЕЛЬНОГО и ПРОСТОГО примера.

      Но - подберу.

      Удалить