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() вм


Комментарии закрыты.