// EPOS Condition Implementation // // Author: alexandre // Documentation: $EPOS/doc/synchronizer Date: 19 May 2004 #include //#include __BEGIN_SYS __BEGIN_IMP Condition::Condition() { db(TRC) << "Condition()\n"; Condition::counter = 0; } Condition::~Condition() { db(TRC) << "~Condition()\n"; } void Condition::wait() { db(TRC) << "Condition::wait()\n"; Condition::self = Concurrent_Thread::running(); Condition::self->suspend(); Condition::counter++; } void Condition::signal() { db(TRC) << "Condition::signal()\n"; Condition::self = Concurrent_Thread::running(); Condition::self->resume(); Condition::counter--; } void Condition::broadcast() { db(TRC) << "Condition::broadcast()\n"; while (Condition::counter > 0) { signal(); } } __END_IMP __END_SYS