π Lock
Lock β ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΡΡΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΠΊΡΠΈΠΉ ΠΊΠΎΠ΄Π° ΠΎΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
π§ ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠ°Π·ΠΎΠ²Π°Ρ ΠΈΠ΄Π΅Ρ: ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΠ΅ΡΡΡΡΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π΅Ρ ΠΏΠΎΡΠ»Π΅.
Π’ΠΈΠΏΡ:
- Mutex β Π΄Π²ΠΎΠΈΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠ°
- Spinlock β Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π±Π΅Π· ΡΠ½Π°)
- RWLock β ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ (ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ) ΠΈ ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ (ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ)
- Semaphore β ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ lock Ρ ΡΡΡΡΡΠΈΠΊΠΎΠΌ
- Futex β fast userspace mutex (Π³ΠΈΠ±ΡΠΈΠ΄ user/kernel ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°)
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
lock()
/acquire()
β Π·Π°Ρ Π²Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈunlock()
/release()
β ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅try_lock()
β Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° Π·Π°Ρ Π²Π°ΡΠ°lock_with_timeout()
β ΠΏΠΎΠΏΡΡΠΊΠ° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
βοΈ ΠΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ
ΠΠ±Π»Π°ΡΡΡ | ΠΡΠΈΠΌΠ΅ΡΡ |
---|---|
Multithreading | ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ, ΠΎΠ±ΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ |
Kernel | ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΠ°ΠΌ |
IPC | ΠΠ°ΡΠΈΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² Π² Shared Memory |
RTOS | Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π΄Π°Ρ ΠΈ ISR |
π» ΠΡΠΈΠΌΠ΅Ρ (C++ std::mutex)
#include <mutex>
std::mutex m;
void thread_func() {
std::lock_guard<std::mutex> guard(m);
// ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ
}
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
-
ΠΡΠΎΡΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
-
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ·ΡΠΊΠ° ΠΈ ΠΠ‘
-
Π Π°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ (ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ)
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
-
Π ΠΈΡΠΊ Deadlock ΠΈ Starvation
-
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ
-
ΠΠΎΠ³ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ ΠΈ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ°
π‘ Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ
-
Atomic ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ β Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌ
-
Condition Variable β ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ
-
Reader-Writer Lock β ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎ ΡΠΈΠΏΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ