class TQueue { ZThread::Mutex
Автор admin
Суббота, 27 июня 2009 11:32
class TQueue { ZThread::Mutex lock: ZThread:Condition cond: std::deque data: public: TQueueО : cond(lock) {} void put(T item) { ZThread::Guard g(lock); data.push_back(itern); cond.signal О: } T get О { ZThread::Guard g(lock); while(data. emptyO) cond.waitO: T returnVal = data.frontO: data.pop_front(); return returnVal: } lendif // TQUEUEJ ///:- Шаблон строится на базе контейнера deque из стандартной библиотеки С++ и дополняет его двумя новыми возможностями. • Синхронизация гарантирует, что два программных потока не будут одновременно добавлять объекты в дек. • Вызовы wait() и signal() обеспечивают автоматическую приостановку потребителей при пустой очереди и их активизацию при появлении новых элементов. Этот относительно небольшой фрагмент кода решает на удивление много проблем1. В следующей простой тестовой программе организуется последовательная обработка объектов Liftoff. Потребителем является объект LiftOffRunner, который извлекает объекты LiftOff из контейнера TQueue и запускает их напрямую (то есть использует собственный программный поток прямым вызовом run() вм
Комментарии закрыты.
Последние комментарии