ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, синхронизация

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡ€ΠΎΡ†Π΅ΡΡ — это объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². А ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство. Π’ ΡΡ‚ΠΎΠΌ пространствС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ прилоТСния (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ΄ΠΈΠ½ exeΠΈ нСсколько dll-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ). ИмСнно Сдинство этого пространства ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ прилоТСния ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ простым. Наоборот, адрСсныС пространства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… процСссов нСзависимы ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, синхронизация (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ЦСлью Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΡΡ€Π΅Π΄ΡΡ‚Π²Π° синхронизации. Π—Π°Π΄Π°Ρ‡ΠΈ, поставлСнныС ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ понятиС ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡ Π΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ срСдства синхронизации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ наглядно Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΠΎΡ‚ΠΎΠΊ, процСсс ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

НаиболСС Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ понятиСм являСтся ΠΏΠΎΡ‚ΠΎΠΊ (thread). Под словом «ΠΏΠΎΡ‚ΠΎΠΊ» имССтся Π² Π²ΠΈΠ΄Ρƒ «ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ считываСт ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ процСссор. ВсС соврСмСнныС ΠžΠ‘ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π°Π΄ нСсколькими Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, ΠΎΠ΄ΠΈΠ½ процСссор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ лишь ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ инструкций. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ «ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Π°Ρ» ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΉ машинС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΆΠ΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС числа процСссоров (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ всСго-Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС приходится ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, заставляя процСссор ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссора разбиваСтся Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ²Π°Π½Ρ‚Π°ΠΌΠΈ. Когда ΠΊΠ²Π°Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ заканчиваСтся, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° приостанавливаСтся, содСрТимоС рСгистров процСссора сохраняСтся Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ области памяти, ΠΈ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ся Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Когда ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ снова Π΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, содСрТимоС рСгистров Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ восстановлСно ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° продолТится Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½Π° вовсС ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π»Π°ΡΡŒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² происходит ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ для Π½ΠΈΡ… самих. Π₯ΠΎΡ‡Ρƒ особо ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ программист Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π£ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ возмоТности, скаТСм, Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΡ‚ этого ΠΏΠΎΡ‚ΠΎΠΊΠ°». ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ косвСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ процСссорами ΠΈΠ»ΠΈ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΠ΄Π½ΠΈΠΌ. ИмСнно это свойство, ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° распрСдСлСния процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΈ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ достоинства многопроцСссорных систСм. Рассмотрим свойства ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… связан свой Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСгистров процСссора, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ контСкстом ΠΏΠΎΡ‚ΠΎΠΊΠ° (thread context). ΠšΡΡ‚Π°Ρ‚ΠΈ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Get Thread Context, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°. Но ΠΊΡ€ΠΎΠΌΠ΅ этого систСма создаСт Π΅Ρ‰Π΅ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ связанных с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π’Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΠΉ ΠΈΠ· Π½ΠΈΡ… (послС контСкста) — ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, стСк (созданиС своСго стСка для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ‚СкстС ΠΏΠΎΡ‚ΠΎΠΊΠ° сохраняСтся, Π² Ρ‚ΠΎΠΌ числС, ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ указатСля стСка, ESP). Для нас это Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΡ‚Π΅ΠΊΠ΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ Ρ…ранятся всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ автоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° свой стСк, Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° имССтся свой собствСнный экзСмпляр локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, доступный Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅ΠΌΡƒ. Π—Π½Π°Ρ‡ΠΈΡ‚, синхронизация ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ Ρ‚рСбуСтся. МоТно, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½ΠΎ Π²Ρ€ΡΠ΄ Π»ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. ВрСмя ΠΆΠΈΠ·Π½ΠΈ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Π°ΠΌ придСтся ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΡƒΠΆΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ эта пСрСмСнная ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΈ Π°Π²Ρ‚оматичСски ΡƒΠ΄Π°Π»ΠΈΡ‚ Π΅Π΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρƒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»ΠΈ статичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ всСгда имССтся лишь ΠΎΠ΄ΠΈΠ½ экзСмпляр, доступный сразу всСм ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡ… ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, хотя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ Π½ΠΈΠΌ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°. Однако с Π½ΠΈΠΌΠΈ связана ΠΈ Π±ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Если Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Ρ Ρ„ункциями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ся. «Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ» программирования, рассчитанный Π½Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ срСду, часто ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ функциями. НапримСр, стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C (C run-time library, RTL) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ errno, ΠΊΡƒΠ΄Π° заносится ΠΊΠΎΠ΄ ошибки Π² Ρ‚ΠΎΠΌ случаС, Ссли систСмный Π²Ρ‹Π·ΠΎΠ² закончился Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим сСбС, Ρ‡Ρ‚ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π·Π²Π°Π» ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ успСл ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ошибки, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ успСл Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅: пСрвая функция ΠΌΠΎΠ³Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π° Π²Ρ‚орая Π½Π΅Ρ‚, ΠΈΠ»ΠΈ Π² ΠΎΠ±Π΅ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ошибки, Π½ΠΎ ΠΊΠΎΠ΄ ΠΈΡ… ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΉ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нСпрСдсказуСм. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ такая ошибка, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π½Π΅ Π²ΡΠ΅Π³Π΄Π°, Π° ΠΎΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ ΠΊ ΡΠ»ΡƒΡ‡Π°ΡŽ. Π­Ρ‚ΠΈΠΌ ΠΎΡ‡Π΅Π½ΡŒ нСприятным свойством ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ практичСски всС ошибки, связанныС с ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΠΎ ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ тСстированиС ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вСсти Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΠΉ машинС, Π³Π΄Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Π΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого стиля программирования. Одно ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π»ΠΈΡˆΡŒ для связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. К ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡŽ, Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° Π±Π΅Π· глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ всС-Ρ‚Π°ΠΊΠΈ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. Часто это случаСтся, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСнСсти ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ΄, рассчитанный Π½Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ срСду, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для Ρ‚Π°ΠΊΠΈΡ… ситуаций Π² Win32 прСдусмотрСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ «Π»ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°» (thread local storage, TLS). Он ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ локальной, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ экзСмпляр для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π•ΡΡ‚ΡŒ Π΄Π²Π° способа Ρ€Π°Π±ΠΎΡ‚Ρ‹ с TLS: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ API (TlsAlloc, TlsGetValue, TlsSetValue, TlsFree) ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ компилятора (Π² Visual C++ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚__declspec (thread)). К ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡŽ, ΠΈ Ρƒ Ρ‚ΠΎΠ³ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ограничСния! ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ число TLS-слотов, выдСляСмых ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Π‘ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² DLL. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, рассчитанныС Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, я Π²Π·ΡΠ» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ школьной ΠΏΠΎΠ΄Π΅Π»ΠΊΠΈ, Π° ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ языка C, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ практичСски Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅! И ΡΡ‚ΠΎ являСтся большой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² компиляторов. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ язык C Π½Π°Ρ‡Π°Π» Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΅Ρ‰Π΅ Π² Ρ‚Π΅ Π΄Π°Π»Π΅ΠΊΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ поточности ΠΈ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π² «ΡΡ‚Π°Ρ€ΠΎΠΌ» стилС. И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡ‚ΡŒ Π΅Π΅ ΠΊ Π½ΠΎΠ²Ρ‹ΠΌ трСбованиям, систСмным программистам приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ TLS ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΡƒΠ»ΠΎΠ²ΠΊΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Visual C++, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поставляСтся с Π΄Π²ΡƒΠΌΡ вСрсиями RTL: для ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ПослСдняя ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°, Π½ΠΎ ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ объСмна ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ. Π£ Π½Π΅Π΅ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚ΠΎΠΆΠ΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: статичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠ°Ρ (Ρ‚Π° ΡΠ°ΠΌΠ°Ρ MSVCRT. DLL, знакомая Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ программистам, Π½ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ). ВСорСтичСски, ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΊΡ€ΠΎΠΌΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΉ. Однако я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½Π΅ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ. Блишком Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ нСявноС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ нСпонятныС ошибки. ВсС Ρ€Π°Π²Π½ΠΎ сэкономитС Π²Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ. Π’ Windows с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ связан Π΅Ρ‰Π΅ ряд систСмных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ APC ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… сообщСний. О ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ части, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΊΠ½Π°. Π’ Π½Π°ΡΠ»Π΅Π΄ΡΡ‚Π²ΠΎ ΠΎΡ‚ UNIX Windows Π΄ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ «Π²ΠΎΠ»ΠΎΠΊΠ½Π°» (fiber). Π’ UNIX ΠΎΠ½ΠΈ появились Ρ€Π°Π½ΡŒΡˆΠ΅ настоящих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° Π² Windows, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для облСгчСния пСрСноса UNIX’ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ΠΎΠ»ΠΎΠΊΠ½ΠΎ — это Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅ «Π½Π΅ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ» ΠΏΠΎΡ‚ΠΎΠΊ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π°ΡΡ‚оящих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², программист Π΄ΠΎΠ»ΠΆΠ΅Π½ сам ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ процСссора с ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅. ΠžΡ‚ΡΡŽΠ΄Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ процСссорами, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ прСимущСства многопроцСссорности сразу Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ. По ΡΡƒΡ‚ΠΈ, Ссли ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎ поточности осущСствляСтся Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‚ΠΎ Π²ΠΎΠ»ΠΎΠΊΠ½Π° — это всСго лишь программная эмуляция ΠΌΠ½ΠΎΠ³ΠΎ поточности. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ†Π΅Π»Π΅ΡΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ использованиС ΠΈΡ… Π΄Π»Ρ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ портирования UNIX-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π»ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ прСдставляСтся ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡƒΠ·Π½Π°Π», Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ΠΏΠΎΡ‚ΠΎΠΊ». Но Ρ ΡΡ‚ΠΈΠΌ понятиСм Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎ связано Π΄Ρ€ΡƒΠ³ΠΎΠ΅: «ΠΏΡ€ΠΎΡ†Π΅ΡΡ». НСдаром ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» Π² MSDN Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся «Processes and Threads».

ΠŸΡ€ΠΎΡ†Π΅ΡΡ — это объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². А ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство. Π’ ΡΡ‚ΠΎΠΌ пространствС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ прилоТСния (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ΄ΠΈΠ½ exeΠΈ нСсколько dll-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ). ИмСнно Сдинство этого пространства ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ прилоТСния ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ простым. Наоборот, адрСсныС пространства Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… процСссов нСзависимы ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° (хотя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ (memory mapped file), ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, которая Π±ΡƒΠ΄Π΅Ρ‚ доступна совмСстно нСскольким процСссам). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Π² Ρ€Π°Π·Π½Ρ‹Ρ… процСссах соотвСтствуСт Ρ€Π°Π·Π½Ρ‹ΠΌ физичСским адрСсам. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсу Π² Ρ€Π°Π·Π½Ρ‹Ρ… процСссах ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΈ этом модификация Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚разится Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это сдСлано для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ надСТности всСй систСмы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ошибка Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³Π»Π° привСсти ΠΊ ΠΏΠΎΡ€Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, процСсс — это нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½) плюс Π΅Π΄ΠΈΠ½ΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ процСсса Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ адрСсном пространствС, ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ прост, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ этом трСбуСтся ΡΠΎΠ³Π»Π°ΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ совмСстными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. БобствСнно, ΠΏΠΎΠ΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ «ΡΠΈΠ½Ρ…ронизация», ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ Π² Π²ΠΈΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π½ΠΎ согласованиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу. Π­Ρ‚ΠΎΠΌΡƒ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ посвящСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ части Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π₯отя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π»Ρ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Ρ€Π°Π·Π½Ρ‹ΠΌ процСссам, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ согласованиС ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ связано с «ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ взаимосвязи процСссов» (inter-process communications, IPC). Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Π΅Π· нСобходимости ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. А Π΄Π»Ρ этого, Ссли ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ€Π°Π·Π½Ρ‹Ρ… адрСсных пространствах, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, носящиС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ IPC (ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…). Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ идСя Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ адрСсном пространствС ΠΏΡ€ΠΈΡˆΠ»Π° Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ программистам Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΡ€Π°Π·Ρƒ. Π’ UNIX’Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ понятия ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΏΡ€ΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π² ΡΡ‚Ρƒ систСму с ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»Π°! Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½ процСсс — ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Π‘ ΡΡ‚ΠΈΠΌ связаны ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ C, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я ΡƒΠΏΠΎΠΌΡΠ½ΡƒΠ», вСдь Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя язык C Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² UNIX’ΠΎΠ²ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, соврСмСнныС вСрсии этой систСмы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. Π₯отя, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, эта идСя Ρƒ Π½ΠΈΡ… Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΆΠΈΠ»Π°ΡΡŒ, ΡŽΠ½ΠΈΠΊΡΠΎΠ²Ρ‹Π΅ программисты ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько процСссов, Π½Π΅ΠΆΠ΅Π»ΠΈ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС. ИмСнно Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΉ web-сСрвСр Apache. Π˜Ρ‚Π°ΠΊ, процСсс — это Π½Π°Π±ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ адрСсном пространствС. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ само ΠΏΠΎ ΡΠ΅Π±Π΅ адрСсноС пространство Π±Π΅Π· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² смысла Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ процСсс считаСтся Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ всС Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ многопоточности

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ направлСния развития Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ соврСмСнных микропроцСссоров ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ стрСмлСниСм ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ПослСднюю ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, наращивая Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΡƒΡŽ частоту ΠΈ/ΠΈΠ»ΠΈ увСличивая число ΠΊΠΎΠΌΠ°Π½Π΄, выполняСмых Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΡ‚.

Одно ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ связано с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ «ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚Ρ€Π΅Π΄ΠΎΠ² (ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²)» — TLP (Thread Level Parallelism). Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π½Π΅ Π² ΡΠΎΡΡ‚оянии Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ всС ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… устройств, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ процСссору Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ (Ρ‚Ρ€Π΅Π΄, ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ устройства. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ аналогию с ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой: Ρ‡Ρ‚ΠΎΠ±Ρ‹ процСссор Π½Π΅ ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°Π», ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° оказываСтся Π² ΡΠΎΡΡ‚оянии оТидания (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°), опСрационная систСма ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ процСссор Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ диспСтчСризации Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΈΠΌΠ΅ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ (MTA — MultiThreading Architecture). ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (TLP), Π΄ΠΎΠ»ΠΆΠ½Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π΄Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ рСсурсы, для Ρ‡Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ срСдства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистровых Ρ„Π°ΠΉΠ»ΠΎΠ²). Однако оказалось, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ МВА Π½Π° Π±Π°Π·Π΅ соврСмСнных супСрскалярных процСссоров, ΠΈ ΡΡ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ лишь ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ МВА Π² Π³Π»Π°Π·Π°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ².

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

АрхитСктура с ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Π΅Π΄ΠΎΠ² — SMT (Simultaneous Multi-Threading) допускаСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π’ ΡΡ‚ΠΎΠΌ случаС Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ Ρ‚Π°ΠΊΡ‚Π΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ устройство ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° любого ΠΏΠΎΡ‚ΠΎΠΊΠ°. Одна ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… особСнностСй SMT Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных процСссоров — ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистров, ΠΊΠΎΠ³Π΄Π° логичСскиС (Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅) рСгистры ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ„изичСскиС, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈ Π²Π΅Π΄Π΅Ρ‚ся Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°. Π’Π΅Ρ…Π½ΠΈΠΊΠ° пСрСимСнования рСгистров ΠΌΠΎΠΆΠ΅Ρ‚, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ прямого дублирования Ρ„Π°ΠΉΠ»ΠΎΠ² рСгистров ΠΊΠ°ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ принадлСТности ΠΏΠΎΡ‚ΠΎΠΊΠ°. Анонсированная Π² 2002 Π³ΠΎΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Intel тСхнология Hyper-Threading — ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Данная тСхнология являСтся Ρ‡Π΅ΠΌ-Ρ‚ΠΎ срСдним ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΌΡƒΠ»ΡŒΡ‚ипроцСссорных систСмах, ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ инструкций, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Ρ… систСмах. ЀактичСски тСхнология Hyper-Threading позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° логичСских процСссора Π² ΠΎΠ΄Π½ΠΎΠΌ физичСском. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ сущСствуСт Π΄Π²Π° процСссора, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π·Π°Π΄Π°Ρ‡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

ΠŸΠΎΡΡ€Π΅Π΄ΡΡ‚Π²ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Hyper-Threading ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ инструкции Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ (Π° Π½Π΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ) Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всС инструкции Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° Π΄Π²Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π­Ρ‚ΠΎ позволяСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прилоТСния ΠΈΠ»ΠΈ Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния ΠΈ Ρ‚Π΅ΠΌ самым ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ IPC процСссора (количСство инструкций, выполняСмых процСссором Π² ΡΠ΅ΠΊΡƒΠ½Π΄Ρƒ), Ρ‡Ρ‚ΠΎ сказываСтся Π½Π° Ρ€ΠΎΡΡ‚Π΅ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π’ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΏΠ»Π°Π½Π΅ процСссор с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Hyper-Threading состоит ΠΈΠ· Π΄Π²ΡƒΡ… логичСских процСссоров, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свои рСгистры ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (Architecture State, AS), Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π΄Π²Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ исполняСмыС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со ΡΠ²ΠΎΠΈΠΌΠΈ собствСнными нСзависимыми рСгистрами ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡΠΌΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ рСсурсы процСссора для выполнСния своих Π·Π°Π΄Π°Ρ‡. ПослС Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… процСссоров ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ процСссора Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ свою Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ прСрывания Π»ΠΈΠ±ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ двухпроцСссорной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ новая тСхнология отличаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° логичСских процСссора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ рСсурсы, ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ кэш-ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΡˆΠΈΠ½Ρƒ. ИспользованиС Π΄Π²ΡƒΡ… логичСских процСссоров позволяСт ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ процСсс ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… прилоТСниях. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ядру процСссора. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ out-of-order (исполнСниС ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Ρ… инструкций Π½Π΅ Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ ΠΈΡ… ΠΏΠΎΡΡ‚уплСния), ядро процСссора способно ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π° ΡΡ‡Ρ‘Ρ‚ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

ИдСя Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Hyper-Threading тСсно связана с ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ NetBurst процСссора Pentium 4 ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС Π΅Ρ‘ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

ΠœΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Intel NetBurst позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° инструкций, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Однако Π΄Π°ΠΆΠ΅ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π²ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ процСссора ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ задСйствованными Π½Π° ΠΏΡ€ΠΎΡ‚яТСнии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’ ΡΡ€Π΅Π΄Π½Π΅ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ для Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ IA-32, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 35% ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов процСссора, Π° 65% ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов процСссора ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ нСэффСктивноС использованиС возмоТностСй процСссора. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ процСссора Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ максимально ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ возмоТности. ИмСнно эту идСю ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ тСхнология Hyper-Threading, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ нСзадСйствованныС рСсурсы процСссора ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

БрСдства синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠ²

ΠΏΠΎΡ‚ΠΎΠΊ процСссор ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° синхронизация Π’Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (mutex, ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ) — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСтся Π² ΠΎΡΠΎΠ±ΠΎΠ΅ сигнальноС состояниС, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π½ΡΡ‚ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Волько ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π²Π»Π°Π΄Π΅Π΅Ρ‚ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΡ‚ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ mutually exclusive access — Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ доступ) — ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ. ПослС всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… дСйствий ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ освобоТдаСтся, прСдоставляя Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ рСкурсивный Π·Π°Ρ…Π²Π°Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, увСличивая счСтчик, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈ Ρ‚рСбуя ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ освобоТдСния. Π’Π°ΠΊΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, mutex Π² Win32 ΠΈ KMUTEX Π² ΡΠ΄Ρ€Π΅ Windows. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΡΡ‚ ΠΊ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ рСкурсивного Π·Π°Ρ…Π²Π°Ρ‚Π°. Π­Ρ‚ΠΎ FAST_MUTEX Π² ΡΠ΄Ρ€Π΅ Windows ΠΈ ΠΊΡ€ΠΈΡ‚ичСская сСкция Π² Win32.

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

Бобытия. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, хранящий Π² ΡΠ΅Π±Π΅ 1 Π±ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ «ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚», Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ», «ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π² Π½Π΅ ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС» ΠΈ «ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ». ОТиданиС Π½Π° ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ событии Π΅ΡΡ‚ΡŒ отсутствиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ исполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ°. ОТиданиС Π½Π° Π½Π΅ ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ событии ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅ исполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (ΠΈΠ»ΠΈ ΠΆΠ΅ вторая Ρ„Π°Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания Π² ΡΠ΄Ρ€Π΅ ОБ) Π½Π΅ ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ событиС. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… событий Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… «Π»ΡŽΠ±ΠΎΠ³ΠΎ» ΠΈΠ»ΠΈ «Π²ΡΠ΅Ρ…». Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ создания события, автоматичСски сбрасываСмого Π² Π½Π΅ ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС послС пробуТдСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΆΠ΅ — ΠΈ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΠΎΠ³ΠΎ — ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° (Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ основа для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° «ΠΊΡ€ΠΈΡ‚ичСская сСкция»). Активно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² MS Windows, ΠΊΠ°ΠΊ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚Π°ΠΊ ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра. Аналогичный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ имССтся ΠΈ Π² ΡΠ΄Ρ€Π΅ Linux ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ kwait_queue.

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ сСкции ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ критичСскиС сСкции, доступны Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Бобытия, ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹ ΠΈ ΡΠ΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎ процСссном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ критичСских сСкций Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠžΠ‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Windows NT) ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ быстрый ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивный[1][2] ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠ½ΠΎ-ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ синхронизации — ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ «ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ» ΠΈ «ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ» Π½Π° ΠΊΡ€ΠΈΡ‚ичСской сСкции ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для случая СдинствСнного ΠΏΠΎΡ‚ΠΎΠΊΠ° (отсутствия ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ) с Ρ†Π΅Π»ΡŒΡŽ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Π² ΡΠ΄Ρ€ΠΎ ΠžΠ‘ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Подобно ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ доступа ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ рСсурсам.

УсловныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (condvars). Π‘Ρ…ΠΎΠ΄Π½Ρ‹ с ΡΠΎΠ±Ρ‹Ρ‚иями, Π½ΠΎ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, понятиС «ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ» Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ адрСс ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΉ, установка условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС Π½Π΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… послСдствий Π² ΡΠ»ΡƒΡ‡Π°Π΅, Ссли Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Установка события Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌ случаС Π²Π»Π΅Ρ‡Π΅Ρ‚ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ состояния «ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ» Π²Π½ΡƒΡ‚Ρ€ΠΈ самого события, послС Ρ‡Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ события, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ исполнСниС Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π±Π΅Π· остановки. Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ использования Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ опСрация «ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ mutex ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ». Активно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠžΠ‘. Дискуссии ΠΎ ΠΏΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°Ρ… ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠ°Ρ… событий ΠΈ ΡƒΡΠ»ΠΎΠ²Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ дискуссий ΠΎ ΠΏΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°Ρ… ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΠΊΠ°Ρ… Windows ΠΈ UNIX.

ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ простой ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный интСрфСйс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ наглядно, сколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΡΠ΅ΠΊΡƒΠ½Π΄Ρƒ выполняСтся ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· 2 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΈ снизу слуТат для назначСния ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡˆΠΊΠ°Π»Π΅ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° (Π½ΠΈΠ·ΠΊΠΈΠΉ, срСдний, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, высокий) ΠΏΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Ρ€ΠΎΠ»ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния ΠΈ Ρ‚Π΅ΠΌ большС ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ рСсурсов систСмы Π½Π΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ использованиС ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ сбои Π² Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΊΠ°ΠΊ прилоТСния, Ρ‚Π°ΠΊ ΠΈ Π²ΡΠ΅ΠΉ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ.

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, ComCtrls, StdCtrls, Unit2 ;

type

TForm1 = class (TForm)

Edit1: TEdit;

Edit2: TEdit;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

Timer1: TTimer;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

procedure FormCreate (Sender: TObject);

procedure Timer1Timer (Sender: TObject);

procedure TrackBar1Change (Sender: TObject);

private

{ Private declarations }

public

Thread1, Thread2: TSimpleThread;

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1. FormCreate (Sender: TObject);

begin

Thread1:=TSimpleThread.Create (False);

Thread1.Priority:=tpLowest;

Thread2:=TSimpleThread.Create (False);

Thread2.Priority:=tpLowest;

end;

procedure TForm1. Timer1Timer (Sender: TObject);

begin

Edit1.Text:=IntToStr (Thread1.Count);

Edit2.Text:=IntToStr (Thread2.Count);

Thread1.Count:=0;

Thread2.Count:=0;

end;

procedure TForm1. TrackBar1Change (Sender: TObject);

Var

I: Integer;

Priority: TThreadPriority;

begin

Priority:=tpLowest;

For I:=0 To (Sender as tTrackBar).Position — 1 Do

inc (Priority);

If Sender=TrackBar1 Then Thread1. Priority:=Priority

Else Thread2. Priority:=Priority;

end;

end.

unit Unit2;

interface

uses

Classes;

type

TSimpleThread = class (TThread)

private

{Private declarations }

protected

procedure Execute; override;

public

Count: integer;

end;

implementation

{Important: Methods and properties of objects in visual components can only be

used in a method called using Synchronize, for example,

Synchronize (UpdateCaption);

and UpdateCaption could look like,

procedure TSimpleThead. UpdateCaption;

begin

Form1.Caption := 'Updated in a thread';

end; }

{TSimpleThead }

procedure TSimpleThread. Execute;

var

i, total, avg: integer;

begin

While true do begin

total:=0;

For i:=1 to 10 do

inc (total, random (Maxint));

avg:=avg Div 10;

inc (Count);

End;

{ Place thread code here }

End.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны, ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ, Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΡΡ€Π΅Π΄ΡΡ‚Π²Π° синхронизации. Π—Π°Π΄Π°Ρ‡ΠΈ, поставлСнныС ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΡΡ‡ΠΈΡ‚Π°ΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ° рассмотрСны с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΎΡ‡Π΅ΠΊ зрСния ΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ сходятся Π²ΠΎ ΠΌΠ½Π΅Π½ΠΈΡΡ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»ΠΎ установлСно, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»Π½ΠΎΠΉ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ слоТно, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мнимая синхронизация, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ процСсса.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ срСдствами установки ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² для процСссов, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ остороТным ΠΈ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ систСма Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ процСсса. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ постановка ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния, Π½ΠΎ ΠΈ ΠΊΡ€Π°Ρ… систСмы.

1. ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ А. Π―. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Delphi 6 — М.: Π—ΠΠž «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π‘Π˜ΠΠžΠœ», 2002 Π³. — 1200 с.

2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΡ€Π΅Π΄Π΅ Delphi: Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΌ для студСнтов всСх ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ. Под ΠΎΠ±Ρ‰Π΅ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠ΅ΠΉ Π‘ΠΈΠ½ΠΈΡ†Ρ‹Π½Π° А. К. — ΠœΠ½.; Π‘Π“Π£Π˜Π , 1998. — 94 с.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ