A computer processor includes a number of register pairs
LOCKADDR/LOCKCOUNT. In each pair, the LOCKADDR/LOCKCOUNT register is to
hold a value that identifies a lock for a computer resource. When a lock
instruction issues, the corresponding LOCKCOUNT register is incremented.
When an unlock instruction issues, the corresponding LOCKCOUNT register is
decremented. The lock is freed when a count associated with the LOCKCOUNT
register is decremented to zero. This scheme provides fast locking and
unlocking in many frequently occurring situations. In some embodiments,
the LOCKCOUNT registers are omitted, and the lock is freed on any unlock
instruction corresponding to the lock. In some embodiments, a computer
object includes a header which includes a pointer to a class structure.
The class structure is aligned on a 4-byte boundary, and therefore two
LSBs of the pointer to the class structure are zero and are not stored in
the header. Instead, two header LSBs store: (1) a LOCK bit indicating
whether the object is locked, and (2) a WANT bit indicating whether a
thread is waiting to acquire a lock for the object.
Een computerbewerker omvat een aantal registerparen LOCKADDR/LOCKCOUNT. In elk paar, moet het register LOCKADDR/LOCKCOUNT een waarde houden die een slot voor een computermiddel identificeert. Wanneer de kwesties van een slotinstructie, het overeenkomstige register LOCKCOUNT wordt verhoogd. Wanneer instructiekwesties open, is het overeenkomstige register LOCKCOUNT decremented. Het slot wordt bevrijd wanneer een telling verbonden aan het register LOCKCOUNT decremented aan nul is. Deze regeling verstrekt snel sluiten en het openen in vele vaak voorkomende situaties. In sommige belichamingen, worden de registers LOCKCOUNT weggelaten, en het slot wordt op om het even welk opent instructie bevrijd die aan het slot beantwoordt. In sommige belichamingen, omvat een computervoorwerp header die een wijzer aan een klassenstructuur omvat. De klassenstructuur wordt gericht op een 4-byte grens, en daarom zijn twee LSBs van de wijzer aan de klassenstructuur nul en niet in header opgeslagen. In plaats daarvan, twee header LSBs opslag: (1) een beetje erop wijzen van het SLOT of het voorwerp gesloten is, en (2) een beetje erop wijzen die van de BEHOEFTE of een draad wacht om een slot voor het voorwerp te verwerven.