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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 20

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

2. Π£ΡΠ»ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Β«Ρ‚ΠΎΡ‡ΠΊΠΈ встрСчи».

НиТС прСдставлСна ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ этого:

Бвязь мутСксов ΠΈ условных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ схСмС Β«ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒΒ»

Одно интСрСсноС Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π΅ выполняСтся, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с мутСксом Β«MutexABCΒ», Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” с мутСксом Β«MutexDEFΒ», ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΠΎΠΈΠΌ Π½Π°Π±ΠΎΡ€Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«CondvarABCDEFΒ»:


Бвязь мутСксов ΠΈ условных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ схСмС Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ».

Π­Ρ‚ΠΎ вСсьма ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ свойство. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ мутСкс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ измСнСния» всСгда, это ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Ρƒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ мутСкс всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ понадобится доступ ΠΊ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ β€” Ссли я, скаТСм, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«Π‘Β», Ρ‚ΠΎ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΌΠ½Π΅ потрСбуСтся Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мутСкс Β«MutexABCΒ». А Ρ‡Ρ‚ΠΎ Ссли я Ρ…ΠΎΡ‡Ρƒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«EΒ»? Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠ΅Ρ€Π΅Π΄ этим я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Ρƒ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ мутСкс Β«MutexDEFΒ». Π—Π°Ρ‚Π΅ΠΌ я Π΅Π΅ измСняю ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽ ΠΎΠ± этом Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Ρ‡Π΅Ρ€Π΅Π· ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Β«CondvarABCDEFΒ», послС Ρ‡Π΅Π³ΠΎ освобоТдаю мутСкс.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ смотритС, Ρ‡Ρ‚ΠΎ происходит. Π’ΠΎΠ»ΠΏΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΆΠ΄Π°Π²ΡˆΠΈΡ… Π½Π° условии Β«CondvarABCDEFΒ», Π²Π΄Ρ€ΡƒΠ³ Ρ€Π΅Π·ΠΊΠΎ «просыпаСтся» (ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_cond_wait()). Π˜Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ оТидания Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ мутСкс. ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ здСсь являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ мутСксов Π΄Π²Π°. (Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, измСнСния ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π°Π», Π΅Π³ΠΎ функция оТидания попытаСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π»ΠΈΠ±ΠΎ MutexABC, Π»ΠΈΠ±ΠΎ MutexDEF β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.) Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² SMP-систСмС Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π±Ρ‹ Π΄Π²Π΅ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π±Ρ‹ нСзависимыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈ этом нСзависимыС мутСксы. ΠšΡ€ΡƒΡ‚ΠΎ, Π΄Π°?

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы QNX/Neutrino

QNX/Neutrino позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ряд изящных Π²Π΅Ρ‰Π΅ΠΉ. POSIX ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с мутСксом Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСсса, Π½ΠΎ позволяСт Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ. Π’ QNX/Neutrino это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ мутСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… процСссов. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, вспомнитС: Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассматриваСм ΠΊΠ°ΠΊ Β«ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму», Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй β€” ядра, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ занимаСтся диспСтчСризациСй, ΠΈ администратора процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, наряду со всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ, заботится ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ памяти ΠΈ «процСссах». ΠœΡƒΡ‚Π΅ΠΊΡ β€” всСго-навсСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ядро Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π΅ΠΌΡƒ всС Ρ€Π°Π²Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΊΠ°ΠΊΠΈΡ… процСссах, это ΡƒΠΆΠ΅ Π·Π°Π±ΠΎΡ‚Π° администратора.

Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ установили ΠΎΠ±Π»Π°ΡΡ‚ΡŒ раздСляСмой памяти ΠΌΠ΅ΠΆΠ΄Ρƒ двумя процСссами ΠΈ размСстили Π² Π½Π΅ΠΉ мутСкс, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π²Π°ΠΌ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Π΄Π²ΡƒΡ… (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅!) процСссах β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutex_lock() ΠΈ pthread_mutex_unlock() Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅.

ΠŸΡƒΠ»Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π”Ρ€ΡƒΠ³ΠΎΠ΅ сущСствСнноС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino β€” это понятиС ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Ρ‚ΠΎ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…. НапримСр, для сСрвСра Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ сообщСния ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Когда этот ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСниС ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запрос, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π½Π° случай поступлСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ запроса β€” Ρ‚ΠΎΠ³Π΄Π° этот запрос Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, ΠΊΠΎΠ³Π΄Π° всС запросы Π±ΡƒΠ΄ΡƒΡ‚ обслуТСны, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ большоС число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π±Π΅Π·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°ΡΡ…ΠΎΠ΄ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы Π²ΠΏΡƒΡΡ‚ΡƒΡŽ, Π²Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, захочСтся ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих Β«Π»ΠΈΡˆΠ½ΠΈΡ…Β» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΆΠΈΠ·Π½ΠΈ β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΠΈ для Π·Π°Π΄Π°Ρ‡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° QNX/Neutrino прСдоставляСт для этого ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… (Π΄ΠΎ 2.00) вСрсиях QNX/Neutrino Π±Ρ‹Π»Π° прСдусмотрСна подобная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° скрыта Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ администратора рСсурсов. Π’ вСрсии 2.00 эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ вынСсСны ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ администратора рСсурсов Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. ΠœΡ‹ Π΅Ρ‰Π΅ вСрнСмся ΠΊ функциям Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠΏΠ°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Π³Π»Π°Π²Π΅ «Администраторы рСсурсов».

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ обсуТдСния Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ слСдуСт Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΏΡƒΠ»Π°Ρ…:

β€’ Ρ€Π΅ΠΆΠΈΠΌ блокирования;

β€’ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ рСсурсы процСссора. Π’ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΌ сСрвСрС это соотвСтствуСт ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π΅Ρ‚ сообщСния. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ этого Ρ€Π΅ΠΆΠΈΠΌΠ° являСтся Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы процСссора β€” это зависит ΠΎΡ‚ структуры процСсса. Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ количСством ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ»Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² QNX/Neutrino прСдусмотрСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <sys/dispatch.h>


thread_pool_t *thread_pool_create(

 thread_pool_attr_t *attr, unsigned flags);


int thread_pool_destroy(thread_pool_t *pool);


int thread_pool_start(void *pool);

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ создаСтС ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ thread_pool_create(), Π° Π·Π°Ρ‚Π΅ΠΌ запускаСтС этот ΠΏΡƒΠ» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ thread_pool_start(). Когда Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ свои Π΄Π΅Π»Π° с ΠΏΡƒΠ»ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ thread_pool_destroy() для Π΅Π³ΠΎ уничтоТСния. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ функция thread_pool_destroy() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡΡƒΡ‚ΡŒ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Β«Π²Π΅Ρ‡Π½ΠΎΒ».

Π˜Ρ‚Π°ΠΊ, пСрвая функция, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β€” это функция thread_pool_create(). Π£ Π½Π΅Π΅ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: attr ΠΈ flags. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ attr β€” атрибутная запись, которая опрСдСляСт Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (см. <sys/dispatch.h>):

typedef struct _thread_pool_attr {

 // Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ дСскриптор ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

 THREAD_POOL_HANDLE_T *handle;

 THREAD_POOL_PARAM_T *(*block_func)

  (THREAD_POOL_PARAM_T *ctp);

 void (*unblock_func)(THREAD_POOL_PARAM_T *ctp);

 int (*handler_func) (THREAD_POOL_PARAM_T *ctp);

 THREAD_POOL_PARAM_T *(*context_alloc)

  (THREAD_POOL_HANDLE_T *handle);

 void *(*context_free)(THREAD_POOL_PARAM_T *ctp);

 // ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

 pthread_attr_t *attr;

 unsigned short lo_water;

 unsigned short increment;

 unsigned short hi_water;

 unsigned short maximum;

} thread_pool_attr_t;

Π― Ρ€Π°Π·Π±ΠΈΠ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° thread_pool_attr_t Π½Π° Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ дСскриптор для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΏΡƒΠ»Π΅, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ β€” Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡƒΠ»Π°.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ числом ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Β«ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ числом ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΏΡƒΠ»Π΅ ΠΈ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ здСсь ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Β«Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования» ΠΈ Β«Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΒ» (Π΄Π°Π»Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ исходящих Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (callout functions), ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ эти эти Ρ€Π΅ΠΆΠΈΠΌΡ‹ соотносятся).

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ рисунок ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ lo_water, hi_water ΠΈ maximum.

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² ΠΏΡƒΠ»Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

(Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ Β«CAΒ» здСсь обозначаСтся функция context_alloc(), ΠΊΠ°ΠΊ Β«CFΒ» β€” функция context_free(), ΠΊΠ°ΠΊ Β«Ρ€Π΅ΠΆΠΈΠΌ блокирования» β€” функция block_func(), Π° ΠΊΠ°ΠΊ Β«Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΒ» β€” функция handler_func().

attr Π­Ρ‚ΠΎ атрибутная запись, которая примСняСтся ΠΏΡ€ΠΈ создании ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠœΡ‹ ΡƒΠΆΠ΅ обсуТдали эту структуру Ρ€Π°Π½Π΅Π΅ (Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «Атрибутная запись ΠΏΠΎΡ‚ΠΎΠΊΠ°Β»). ВспомнитС β€” это Ρ‚Π° самая структура, которая Π·Π°Π΄Π°Π΅Ρ‚ характСристики Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°: ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка, ΠΈ Ρ‚.Π΄. lo_water (ΠžΡ‚ Β«Low watermarkΒ», Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ β€” «ниТняя ватСрлиния» β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.) Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π°Π΄Π°Π΅Ρ‚ минимальноС количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования. Π’ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΌ сСрвСрС это Π±Ρ‹Π»ΠΎ Π±Ρ‹ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΆΠ΄ΡƒΡ‰ΠΈΡ… запроса. Если число ΠΆΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² мСньшС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° lo_water, (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ приняли сообщСниС, ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΆΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π½Π° Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ), Ρ‚ΠΎΠ³Π΄Π° создаСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Ρ‰Π΅ increment ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π­Ρ‚ΠΎ прСдставлСно Π½Π° рисункС Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ этапа, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ «созданиС ΠΏΠΎΡ‚ΠΎΠΊΠ°Β». increment (Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ β€” Β«ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅Β» β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.) Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт, сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ созданы сразу, Ссли число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², находящихся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования, становится мСньшС значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° lo_water. Π’ Π²Ρ‹Π±ΠΎΡ€Π΅ значСния для этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²Ρ‹ Π±Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вСроятно Π½Π°Ρ‡Π°Π»ΠΈ со значСния 1 (Π΅Π΄ΠΈΠ½ΠΈΡ†Π°). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования стало Π±Ρ‹ мСньшС значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° lo_water, Ρ‚ΠΎ ΠΏΡƒΠ»ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ‹Π» Π±Ρ‹ создан Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠΉ настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° increment ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ процСсса ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. НапримСр, Ссли ваш процСсс пСриодичСски ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ «всплСски» запросов, Ρ‚ΠΎ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², находящихся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования, ΡƒΠΏΠ°Π»ΠΎ Π½ΠΈΠΆΠ΅ значСния lo_water, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΎ Ρ‚Π°ΠΊΠΎΠΌ «всплСскС» ΠΈ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ создании Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. hi_water (ΠžΡ‚ Β«high watermarkΒ», Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ β€” «вСрхняя ватСрлиния» β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.) Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄Π΅Π» числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. По ΠΌΠ΅Ρ€Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ своих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌ блокирования. Однако, Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΅ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ счСтчик числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², находящихся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования, ΠΈ Ссли Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° hi_water, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° автоматичСски ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Π²Π°Π» ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ намСрСвался Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌ блокирования). Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Ρ€Π°Π·Π΄Π²ΠΎΠ΅Π½ΠΈΠ΅ΠΌ стрСлки, исходящСй ΠΈΠ· Π±Π»ΠΎΠΊΠ° Β«Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΒ» β€” ΠΎΠ΄Π½Π° стрСлка Π²Π΅Π΄Π΅Ρ‚ ΠΊ Β«Ρ€Π΅ΠΆΠΈΠΌΡƒ блокирования», Π° вторая β€” ΠΊ Π±Π»ΠΎΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«CFΒ» ΠΈ Π΄Π°Π»Π΅Π΅ Π½Π° ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сочСтаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² lo_water ΠΈ hi_water позволяСт Π²Π°ΠΌ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ находящихся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ блокирования. maximum ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° максимальноС число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ дСйствий Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡƒΠ»ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². НапримСр, ΠΏΡ€ΠΈ создании Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² случаС ΠΈΡ… Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ (ΠΊΠΎΠ³Π΄Π° число Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½ΠΈΠΆΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ lo_water) ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ maximum.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ flags, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ thread_pool_create(). Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: