dPtr car; public: WaxOff(

Автор admin Суббота, 27 июня 2009 11:32

dPtr car; public: WaxOff(CountedPtr& c) : car(c) {} void runО { try { while(IThread:interrupted О) { car->waitForWaxing(): cout « “Wax Off!” « endl; Thread:;sieep(200): car->buffed(); } } catch(Interrupted_Exception&) { /* Exit */ } cout « “Ending Wax Off process” « endl; } }: int mainO { cout « “Press to quit” « endl: try { CountedPtr car(new Car); ThreadedExecutor executor; executor.execute(new WaxOff(car)); executor.execute(new WaxOn(car)); cin.get(): executor. interruptO; } catch(Synchronization_Exception& e) { cerr « e.whatO « endl; } } III:- В конструкторе Car мутекс инкапсулируется в объекте Condition и в дальнейшем используется для управления взаимодействием между задачами. Тем не менее, объект Condition не содержит информации о состоянии процесса, поэтому в класс необходимо включить дополнительные переменные. В нашем случае в Саг добавляется флаг bool waxOn, обозначающий текущее состояние процесса (нанесение покрытия или полировка). Функция waitForWaxingO проверяет флаг waxOn. Если флаг равен false, вызывающий поток приостанавливается вызовом wait() для объекта Condition.


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