// EPOS Mutex Implementation // // Author: alexandre // Documentation: $EPOS/doc/synchronizer Date: 19 May 2004 #include #include __BEGIN_SYS __BEGIN_IMP /* BTS - Bit Test and Set BTS r/m16, r16 Seleciona o bit em um bit string (especificado com o primeiro operando, chamado de bit base) na posicao do bit designado pelo bit do operando offset (segundo operando), armazena o valor do bit no CF flag, e ajusta o bit selecionado no bit string para 1. O operador de bit base pode ser um registrador ou um local de memoria; o operador de bit offset pode ser um registrador ou um valor imediato. BTS é utilizado no arquivo epos/include/mediator/cpu/ia32.h na função tsl */ Mutex::Mutex() { db(TRC) << "Mutex()\n"; Mutex::flag = 0; } Mutex::~Mutex() { db(TRC) << "~Mutex()\n"; } void Mutex::lock() { db(TRC) << "Mutex::lock()\n"; Mutex::self = Concurrent_Thread::running(); while (IA32::tsl(Mutex::flag)) Mutex::self->suspend(); } void Mutex::unlock() { db(TRC) << "Mutex::unlock()\n"; Mutex::self = Concurrent_Thread::running(); Mutex::flag = 0; Mutex::self->resume(); } __END_IMP __END_SYS