备注
AI Translation Notice
This document was automatically translated by hunyuan-turbos-latest model, for reference only.
Source document: kernel/locking/locks.md
Translation time: 2026-01-05 12:01:11
Translation model:
hunyuan-turbos-latest
Please report issues via Community Channel
Types of Locks and Their Rules
Introduction
The DragonOS kernel implements several types of locks, which can be broadly categorized into two types:
Sleepable locks
Spinlocks
Lock Types
Sleepable Locks
Sleepable locks can only be acquired in preemptible contexts.
In DragonOS, the following sleepable locks are implemented:
semaphore
rwsem
mutex_t
Spinlocks
spinlock_t
RawSpinLock (Rust version of spinlock_t, but incompatible with spinlock_t)
SpinLock — Built on RawSpinLock, it encapsulates a Guard layer, binding the lock and the data it protects within a single structure, and prevents accessing data without locking at compile time.
When a process acquires a spinlock, it modifies the lock variable holding count in the PCB, thereby implicitly disabling preemption. For more flexible operations, spinlocks also provide the following methods:
Suffix |
Description |
|---|---|
_irq() |
Disables interrupts when acquiring the lock / Enables interrupts when releasing the lock |
_irqsave()/_irqrestore() |
Saves interrupt state and disables interrupts when acquiring the lock / Restores interrupt state when releasing the lock |
Detailed Descriptions
Detailed Description of Spinlocks
For detailed information about spinlocks, please refer to the document: 自旋锁
Semaphore
The semaphore is implemented based on counting.
When available resources are insufficient, a process attempting to perform a down operation on the semaphore will be put to sleep until resources become available.
Mutex
Please refer to Mutex文档