Re[5]: реализация читатели-писатель
От: remark Россия http://www.1024cores.net/
Дата: 27.04.10 11:16
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Ну так это я тоже понимаю. Потоки висли на этом

OV>
OV>request* dequeue()
OV>  {
OV>      boost::unique_lock<boost::mutex> lock (mtx);
OV>      while (queue.empty())
OV>        cv.wait(lock); //<====== 
OV>      request* req = queue.front();
OV>      queue.pop_front();
OV>      return req;
OV>  }
OV>


Условная переменная (в отличие от семафора) не несёт никакого состояния, поэтому просто выполнение broadcast() без соотв. модификации состояния не имеет смысла.
Тебе надо класть в очередь сообщение-маркер и потом делать broadcast(). Либо ждать появления сообщений в очереди ИЛИ установки какого-то, устанавливать флаг и делать broadcast().
Просто broadcast() — бессмысленная переменная, можешь считать её на no-op.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.