Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ (ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ). ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ β Π½Π΅ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ), Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ Π²ΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ (Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅). Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ΄ΡΠ°, ΠΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΡΡ ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ (spin), Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠ»Π°ΡΡ Π»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΊΠΎΠ΄ ΡΠ΄ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π·Π°Ρ Π²Π°Ρ), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅. Π‘Π»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅. ΠΡΠ»ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ (ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ΄Ρ ΡΠ΄ΡΠ°, Π·Π°Ρ Π²Π°ΡΠΈΠ²ΡΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ) ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠ΄ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Ρ Π²Π°ΡΠΈΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π΅Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ.
Π―Π΄ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Ρ Π²Π°ΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
spinlock_t mr_lock = SPIN_LOCK_UNLOCKED;
unsigned long flags;
spin_lock_irqsave(&mr_lock, flags);
/* ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ°ΡΡΠΎΠΊ ... */
spin_unlock_irqrestore(&mr_lock, flags);
ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° spin_lock_irqsave() ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. Π€ΡΠ½ΠΊΡΠΈΡ spin_unlock_irqrestore(), Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠΈΡ ΠΈΡ ΠΏΠΎ ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ flags ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
ΠΠ° ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ Π·Π°ΠΏΡΠ΅ΡΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΊ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ Π΄Π°Π½Π½ΡΠΌ, Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π½Π΅ Π±ΡΠ΄Π΅Ρ. Π€ΡΠ½ΠΊΡΠΈΠΈ Π·Π°Ρ Π²Π°ΡΠ° ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠ΅Π΅ΠΌΠΏΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ΄ΡΠ°.
Π§ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΠΠ°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ»Π° ΡΠ΅ΡΠΊΠΎ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ. ΠΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ β ΡΡΠΎ Π·Π°ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Π° Π½Π΅ ΠΊΠΎΠ΄. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠΈ, Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΊΠΎΠ² Π»Π΅ΠΆΠ°Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡ Π·Π°ΡΠΈΡΡ, Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΊΠΎΠ΄. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΡΡΡ ΡΡΠ°ΡΡΠΊΠΈ ΠΊΠΎΠ΄Π°, ΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΡΡΡΠ΄Π½ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΈ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌ Π³ΠΎΠ½ΠΎΠΊ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΡΠΊΡΡΡΠ° struct foo Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ foo_lock. Π‘ Π΄Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠ»ΠΈ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ, ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΎΡ Π΄ΠΎΡΡΡΠΏ Π±ΡΠ΄Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ.
ΠΡΠ»ΠΈ ΡΠΎΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ, ΡΠΎ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ spin_lock_irq() ΠΈ spin_unlock_irq().
spinlock_t mr_lock = SPIN_LOCK_UNLOCKED;
spin_lock_irq(&mr_lock) ;
/* ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ°ΡΡΠΎΠΊ ... */
spin_unlock_irq(&mr_lock);
ΠΠ»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ spinlock_irq(). ΠΡΠ»ΠΈ ΡΡΠΎΠΈΡ Π²ΠΎΠΏΡΠΎΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΎ Π»ΡΡΡΠ΅ Π±ΡΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ, Π° Π½Π΅ ΠΎΠ³ΠΎΡΡΠ°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΉΠ΄Π΅ΡΠ΅, ΡΡΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ Π½Π΅ ΡΠ°ΠΌ, Π³Π΄Π΅ Π½ΡΠΆΠ½ΠΎ.
ΠΡΠ»Π°Π΄ΠΊΠ° ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΄ΡΠ° CONFIG_DEBUG_SPINLOCK Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π² ΠΊΠΎΠ΄Π΅ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΠ΄ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΈ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠΌΠΈ. ΠΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΡΠ΅Π³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ.
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ spin_lock_init() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ (ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° spinlock_t, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, Π° Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½Π΅Π΅).
Π€ΡΠ½ΠΊΡΠΈΡ spin_try_lock() ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΏΡΡΠΊΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°, ΡΠΎ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π±ΡΠ»Π° Π·Π°Ρ Π²Π°ΡΠ΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΡΠ»Ρ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ spin_is_locked() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π°. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½ΡΠ»Ρ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ[48].
Π ΡΠ°Π±Π». 9.3 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ.
Π’Π°Π±Π»ΠΈΡΠ° 9.3. Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ spin_lock() ΠΠ°Ρ Π²Π°ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ spin_lock_irq() ΠΠ°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ ΠΈ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ spin_lock_irqsave() Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ ΠΈ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ spin_unlock() ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ spin_unlock_irq() ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ spin_unlock_irqrestore() ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ spin_lock_init() ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° spinlock_t Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ spin_trylock() ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΏΡΡΠΊΡ Π·Π°Ρ Π²Π°ΡΠ° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ spin_is_locked() ΠΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π°, ΠΈ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅Π‘ΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 7, "ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ", ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ spin_lock_bh() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½. Π€ΡΠ½ΠΊΡΠΈΡ spin_unlock_bh() Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ΅ΡΠ½ΡΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΠΈΡΠ°ΡΡ ΠΏΡΡΠ΅ΠΌ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΠΈ Π·Π°Ρ Π²Π°ΡΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ΅ΡΠ½ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ.
ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π΄Π²Π° ΡΠ°ΡΠΊΠ»Π΅ΡΠ° (tasklet) ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π½Π΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΊΠ»Π΅ΡΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΡΠΊΠ»Π΅ΡΠ°ΠΌΠΈ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ°ΠΊΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΡΠΊΠ»Π΅Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΡΠ΅ΡΠ½ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΡΠΊΠ»Π΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅.