πŸ“Œ 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 β€” Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ доступа ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ