Смешно. По мотивам...
Задавал тут вопрос - http://programmingmindstream.blogspot.ru/2014/06/blog-post_18.html
Знаете что я выяснил в последующее время?
Это то, что aPipe - НАДО защищать.
Но!
Не НА СЕРВЕРЕ.
А НА КЛИЕНТЕ!
Интересно как?
Задавал тут вопрос - http://programmingmindstream.blogspot.ru/2014/06/blog-post_18.html
Знаете что я выяснил в последующее время?
Это то, что aPipe - НАДО защищать.
Но!
Не НА СЕРВЕРЕ.
А НА КЛИЕНТЕ!
Интересно как?
«Это то, что aPipe - НАДО защищать.
ОтветитьУдалитьНо!
Не НА СЕРВЕРЕ.
А НА КЛИЕНТЕ!»
-- Пока не понятно, что Вы подразумеваете под сервером, а что под клиентом...
Вероятно, Вы имеете ввиду, что "защиту" aPipe невозможно расположить в реализации этого класса (что было бы неудивительно) - но Вы сообщили слишком мало, чтобы что-то утверждать на этот счёт.
Интересна фабула, прецеденты использования aPipe. Словом, тот контекст, о котором я говорил ранее...
Рассказать про проблемы?
УдалитьВот оно что:
Клиентское приложение имеет коннекцию к серверу.
И в результате "разговора" по этой коннекции что-то происходит на сервере (и на клиенте).
В итоге сервер отсылает клиенту нотификацию, которую клиент обрабатывает в ДРУГОМ потоке.
Клиент принимает эту нотификацию и пытается "начать разговор" с сервером, по тому же порту.
И в итоге ловит ошибку "коннекция уже открыта".
Это когда я убрал критические секции на сервере.
Потому что через эти критические секции и КЛИЕНТЫ были синхронизированы (как нетрудно догадаться).
Когда же я защитил коннекции критическими секциями на клиенте - всё стало хорошо. Что и понятно.
Осталось разобраться с одним - "а почему только одна коннекция возможна".
И "к чему я это всё"? А к тому, что надо ПОНИМАТЬ - КАКИЕ ресурсы защищают критические секции, а не просто "рассыпать их по коду" в надежде на то, что "всё в итоге заведётся".
УдалитьЗаведётся...
Но есть ДРУГОЙ момент - dead-lock'и.
Вообще говоря - на основе этого опыта я УЖЕ хочу написать пост "как правильно защищать ресурсы и ЗАЧЕМ", только я пока не подобрал ПОКАЗАТЕЛЬНОГО и ПРОСТОГО примера.
Но - подберу.