Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 69

Автор ДТонсон Π₯Π°Ρ€Ρ‚

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ дСйствСнным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ сниТСния риска Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ являСтся Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… дСскрипторов ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² Π² массивС ΠΈ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WaitForMultipleObjects с Ρ„Π»Π°Π³ΠΎΠΌ fWaitAll, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ установлСно Ρ€Π°Π²Π½Ρ‹ΠΌ True, вслСдствиС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΎΠ΄Π½ΠΎΠΉ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΎΠ±Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°, Π»ΠΈΠ±ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π’ случаС использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CRITICAL_SECTION описанная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ°.

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Π·ΠΎΡ€: ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CRITICAL_SECTION

Как ΡƒΠΆΠ΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CRITICAL_SECTION вСсьма Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΡ€ΡƒΠ³Π° Π·Π°Π΄Π°Ρ‡. Π’ частности, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈ Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π·Π°Π²Π»Π°Π΄Π΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ освободится. ΠœΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ достигаСтся это лишь Π·Π° счСт ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ пСрСчислим Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ отличия, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации.

β€’ ΠœΡŒΡŽΡ‚Сксы, ΠΏΠΎΠΊΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, пСрСходят Π² сигнальноС состояниС, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя.

β€’ Π˜ΠΌΠ΅Π΅Ρ‚ся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° с использованиСм ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° оТидания, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CS Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрос ΠΈΡ… состояния.

β€’ ΠœΡŒΡŽΡ‚Сксам ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, ΠΈ ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹ΠΌ процСссам.

β€’ Πš ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° функция WaitForMultipleObjects, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования, Π½ΠΎ ΠΈ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

β€’ ΠŸΠΎΡ‚ΠΎΠΊ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, ΠΌΠΎΠΆΠ΅Ρ‚ сразу ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ становится Π΅Π³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ. Π’ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CS Π·Π° ΠΏΡ€Π°Π²ΠΎ владСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΡΠ·Π°Ρ‚ΡŒΡΡ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

β€’ ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, хотя ΠΈ Π½Π΅ всСгда, использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CS обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚ΠΎΠΉ, которая достигаСтся ΠΏΡ€ΠΈ использовании ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ². Π­Ρ‚ΠΎΡ‚ вопрос Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ обсуТдаСтся Π² Π³Π»Π°Π²Π΅ 9.

Бинхронизация ΠΊΡƒΡ‡

Π’ NT для синхронизации доступа ΠΊ ΠΊΡƒΡ‡Π°ΠΌ (Π³Π»Π°Π²Π° 5) прСдусмотрСны Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” HeapLock ΠΈ HeapUnlock. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ СдинствСнным Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ являСтся дСскриптор. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π»Π°Π³ HEAP_NO_SERIALIZE, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΡ€Π°Π²Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ ΠΊΡƒΡ‡Π΅.

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… упомянутых Π² Π½Π°Ρ‡Π°Π»Π΅ Π³Π»Π°Π²Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации ядра β€” сСмафоры (semaphores), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ счСтчики, ΠΈ ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого счСтчика большС 0, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСмафора находится Π² сигнальном состоянии. Если ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика становится Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сСмафора ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² нСсигнальноС состояниС.

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈ процСссы ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‚ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ оТидания. ΠŸΡ€ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1. 

К функциям управлСния сСмафорами относятся CreateSemaphore, OpenSemaphore ΠΈ ReleaseSemaphore, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ послСдняя функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π½Π° 1 ΠΈ Π±ΠΎΠ»Π΅Π΅. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ своим эквивалСнтам, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ для управлСния ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌΠΈ. 

HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpsa, LONG lSemInitial, LONG lSemMax, LPCTSTR lpSemName) 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lSemMax, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, 1, опрСдСляСт максимально допустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сСмафора. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lSemInitial β€” Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого счСтчика, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ: 0≀ lSemInitial≀ lSemMax ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ значСния NULL ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π΅Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

КаТдая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ опСрация оТидания ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 1, Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReleaseSemaphore Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ счСтчика ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π΄ΠΎ любого значСния Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ максимально допустимого. 

BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG cReleaseCount, LPLONG lpPreviousCount) 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ получСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ значСния счСтчика, опрСдСляСмого ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ lpPreviousCount, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ ΠΈΠΌΠ΅Π» Π΄ΠΎ освобоТдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° синхронизации ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReleaseSemaphore, Π½ΠΎ Ссли нСобходимости Π² этом Π½Π΅Ρ‚, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ упомянутого указатСля слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ NULL.

Число, прибавляСмоС ΠΊ счСтчику сСмафора (cReleaseCount), Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ большС 0, Π½ΠΎ Ссли Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReleaseSemaphore ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Ρƒ значСния счСтчика Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ допустимого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ‚ΠΎ ΠΎΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой, возвращая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FALSE, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сСмафора остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика слСдуСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, достиг Π»ΠΈ счСтчик максимально допустимого значСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ прСдусмотрСно срСдство, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ счСтчика Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΅Π³ΠΎ освобоТдСния. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ значСния счСтчика сСмафора ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° Web-сайтС ΠΊΠ½ΠΈΠ³ΠΈ.

Как Π½ΠΈ ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ ΠΊΠ°ΠΊ частный случай сСмафора, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΎ Ρ€Π°Π²Π½Ρ‹ΠΌ 1, это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π²Π²ΠΈΠ΄Ρƒ отсутствия понятия ΠΏΡ€Π°Π² владСния сСмафором. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ освобоТдСн Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСльзя Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΏΡ€Π°Π²Π°Ρ… владСния сСмафором, отсутствуСт ΠΈ понятиС ΠΏΠΎΠΊΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ сСмафора.

ИспользованиС сСмафоров

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ примСнСния сСмафоров являСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ распрСдСлСниСм ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… рСсурсов, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сСмафора ассоциируСтся с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ количСством доступных рСсурсов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, количСством сообщСний, находящихся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’ΠΎΠ³Π΄Π° максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика соотвСтствуСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ сообщСниС Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ReleaseSemaphore, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ значСния счСтчика Π½Π° 1 (cReleaseCount). ΠŸΠΎΡ‚ΠΎΠΊΠΈ потрСбитСля Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° сСмафора Π² сигнальноС состояниС, получая сообщСния ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ значСния счСтчика.

ВслСд Π·Π° рассмотрСниСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 9.1 обсуТдаСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ случай примСнСния сСмафоров, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ограничСния количСства Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², фактичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡΠΎΡΡ‚ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях β€” ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ дроссСли сСмафоров (semaphore throttles), обсуТдаСтся Π² Π³Π»Π°Π²Π΅ 9.

ΠžΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ возникновСния условий состязаний Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ sortMT (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 7.2) ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ сСмафоров, связанноС с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ количСством ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π΅Π½Π½ΠΎΠΌ состоянии. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π½Π΅ приостанавливая ΠΈΡ…. ПослС этого всС ΠΎΠ½ΠΈ сразу ΠΆΠ΅ пСрСходят ΠΊ оТиданию ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² сигнальноС состояниС сСмафора, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0. Π”Π°Π»Π΅Π΅, Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ReleaseCount с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° 4 (ΠΈΠ»ΠΈ Π½Π° любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ количСству ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²), Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

НСсмотря Π½Π° всС удобства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сулит использованиС сСмафоров, ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС излишними Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΈ события (описанныС Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²), ΠΏΡ€ΠΈ условии ΠΈΡ… совмСстного использования, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности, Ρ‡Π΅ΠΌ сСмафоры. Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ содСрТится Π² Π³Π»Π°Π²Π΅ 10.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ сСмафоров

Π’ Windows ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ ограничСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСмафоров. НапримСр, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ счСтчик сСмафора ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ Π½Π° 2? Для этого ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠ³ Π±Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π²Π° Ρ€Π°Π·Π° подряд, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, Π½ΠΎ эта опСрация Π½Π΅ Π±Ρ‹Π»Π° Π±Ρ‹ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ оТидания Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вытСснСн. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого, ΠΊΠ°ΠΊ описываСтся Π½ΠΈΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (deadlock) ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

/* hsem – дСскриптор сСмафора. МаксимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сСмафора Ρ€Π°Π²Π½ΠΎ 2. */

…

/* Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сСмафора Π½Π° 2. */

WaitForSingleObject(hSem, INFINITE);

WaitForSingleObject(hSem, INFINITE);

…

/* Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика сСмафора Π½Π° 2. */

ReleaseSemaphore(hSem, 2, &PrevCount);

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ситуации ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ максимальноС ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ значСния счСтчика ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 2 ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» оТидания, Π° Π·Π°Ρ‚Π΅ΠΌ вытСсняСтся. Π”Π°Π»Π΅Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» оТидания ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π΄ΠΎ 0. Оба ΠΏΠΎΡ‚ΠΎΠΊΠ° окаТутся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» оТидания. Вакая простая ситуация Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ являСтся довольно Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ.