Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [boost] читатели / писатель 
:(
    Опции темы
cupper
Дата 1.3.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Пытаюсь реализовать этот процесс.


Имею, n-e количество поток выполняет функцию F1, с телом
Код

    boost::shared_lock<boost::shared_mutex> lockRead(rwMtx_);
    if(pSession_)
              pSession_->put(msg.get());


один поток в произвольное время делает вот так (F2)
Код

              boost::unique_lock<boost::shared_mutex> lockWrite(rwMtx_);

    sharedBuffer_.erase_if(boost::bind(ComparePtrApplication(), _1, this));
    pSession_.reset();


sharedBuffer это некий общий буфер в который кемто другим заносится данные в виде пары 
- сообщение для отправки
- указатель на экземпляр класса который должен его отправить

обыкновенная ситуация когда в буфере есть данные который должен оправить некий П1, но тут вдруг этот П1 получает дисконнект, и уме больше ненадо отправлять данные. Тогда ему нужно из буфера удалить все записи с указателем на себя. Тут как раз этим П1 вызывается функция F2, он во первых хочет получить полные права на свой мютес, что бы больше никто не смог отправлять данные по средством F1.
После того как он получает управление, от отчищает буфер от записей с собой. Удаляет соединение (reset).
Далее освобождает мютекс для читателей, которые в свою очередь (те кто уже успех захватить запись из буфера, но не успел отправить ее до дисконнекта) видят что соединение уже нету и захваченную запись нужно просто пропустить.

Меня собстно интересует момент правильно ли я реализовал блокировку мютекса. 
То что сразу несколько читателей могут получить доступ заняв мютекс частично 
Код

boost::shared_lock<boost::shared_mutex> lockRead(rwMtx_);

и то что когда писатель захочет полностью занять мютекс
Код

boost::unique_lock<boost::shared_mutex> lockWrite(rwMtx_);

он будет вынужден дождаться пока все текущие читатели его отпустят. Но при этом блокирует его захват новыми читателями ?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0393 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.