An object-oriented compiler/interpreter allocates monitor records for use
in implementing synchronized operations on objects. When a synchronization
operation is to be performed on an object, a thread that is to perform the
operation "inflates" the object's monitor by placing into its header a
pointer to the monitor record as well as an indication of the monitor's
inflated status. When a thread is to release its lock on an object, it
first consults a reference-count field in the monitor record to determine
whether any other threads are synchronized on the object. It then
dissociates the object from the monitor record. The dissociation is not
atomic with the reference-count check, so the releasing thread checks the
reference count again. If that count indicates that further objects had
employed the monitor record to synchronize on the object in the interim,
then the unlocking thread wakes all waiting threads.
Um compiler/interpreter object-oriented aloca registros do monitor para o uso em executar operações sincronizadas em objetos. Quando uma operação da sincronização deve ser executada em um objeto, uma linha que deva executar a operação "infla" o monitor do objeto colocando em seu encabeçamento um ponteiro ao registro do monitor assim como uma indicação do status inflado do monitor. Quando uma linha deve liberar seu fechamento em um objeto, consulta primeiramente referência-conta o campo no registro do monitor para determinar se alguma outra linha está sincronizada no objeto. Dissociates então o objeto do registro do monitor. O dissociation não é atômico com referência-conta a verificação, assim que as verificações que liberando-se da linha a referência conta outra vez. Se essa contagem indicar que uns objetos mais adicionais tinham empregado o registro do monitor para sincronizar no objeto no ínterim, a seguir a linha destravando acorda todas as linhas de espera.