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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: сСрвСр, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 11.4. SrvrBcst: функция ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° 

static DWORD WINAPI ServerBroadcast(LPLONG pNull) {

 MS_MESSAGE MsNotify;

 DWORD nXfer;

 HANDLE hMsFile;

 /*ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик для Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ "ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°"*/

 while (!ShutDown) { /* Π¦ΠΈΠΊΠ» выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ сСрвСрныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ. */

  /* Π–Π΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик. */

  Sleep(CS_TIMEOUT);

  hMsFile = CreateFile(MS_CLTNAME, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN EXISTING, FILE ATTRIBUTE NORMAL, NULL); 

  if (hMsFile == INVALID_HANDLE_VALUE) continue;

  /* ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик. */

  MsNotify.msStatus = 0;

  MsNotify.msUtilization = 0;

  _tcscpy(MsNotify.msName, SERVER_PIPE);

  if (WriteFile(hMsFile, &MsNotify, MSM_SIZE, &nXfer, NULL)) ReportError(_T("Ошибка записи ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра."), 13, TRUE);

  CloseHandle(hMsFile);

 }

 _tprintf(_T("Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.\n"));

 _endthreadex(0);

 return 0;

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 11.5 прСдставлСна функция, которая вызываСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ (см. ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ 11.2) для обнаруТСния сСрвСра.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 11.5. LocSrvr: ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр 

/* Π“Π»Π°Π²Π° 11. LocSrver.c */

/* Найти сСрвСр ΠΏΡƒΡ‚Π΅ΠΌ считывания ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ рассылки ΠΈΠΌΠ΅Π½ сСрвСров. */


#include "EvryThng.h"

#include "ClntSrvr.h" /* ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика. */


BOOL LocateServer(LPTSTR pPipeName) {

 HANDLE MsFile;

 MS_MESSAGE ServerMsg;

 BOOL Found = FALSE;

 DWORD cbRead;

 MsFile = CreateMailslot(MS_SRVNAME, 0, CS_TIMEOUT, NULL);

 while (!Found) {

  _tprintf(_T("Поиск сСрвСра.\n"));

  Found = ReadFile(MsFile, &ServerMsg, MSM_SIZE, &cbRead, NULL);

 }

 _tprintf(_T("Π‘Π΅Ρ€Π²Π΅Ρ€ Π½Π°ΠΉΠ΄Π΅Π½.\n"));

 CloseHandle(MsFile);

 /* Имя ΠΊΠ°Π½Π°Π»Π° сСрвСра. */

 _tcscpy(pPipeName, ServerMsg.msName);

 return TRUE;

}

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

Для описания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² проСктирования ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠ°ΠΊ ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (thread pool), симмСтричныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ (symmetric threads) ΠΈ асиммСтричная потоковая организация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (asymmetric threading), Π° ΠΌΡ‹ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использовали модСль "хозяин/Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ", ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классичСскиС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄Π°Π½ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ объяснСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, основанной Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Component Object Model, БОМ; см. [3]): однопоточная модСль (single threading), модСль Π°ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (apartment model) ΠΈ модСль свободных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (free threading). Π’ БОМ эти ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π·Π° счСт использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Windows, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ синхронизации ΠΈΡ… выполнСния. КаТдая ΠΈΠ· пСрСчислСнных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… характСристиками ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅Ρ‚ свои трСбования ΠΊ синхронизации.

β€’ ΠŸΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² β€” это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², доступных для использования ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рис. 7.1 ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.3 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΡΡ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ. ΠŸΡ€ΠΈ отсоСдинСнии ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΡ‚ΠΎΠΊ возвращаСтся Π² ΠΏΡƒΠ».

β€’ ΠŸΠΎΡ‚оковая модСль являСтся симмСтричной, Ссли Π³Ρ€ΡƒΠΏΠΏΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ с использованиСм ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ grepMT (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 7.1): всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ поиска шаблона. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΏΡƒΠ»Π°; ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… создаСтся для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ сразу ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. ΠŸΡƒΠ» симмСтричных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² создаСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 11.3.

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

β€’ Π’ соотвСтствии с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ БОМ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Ссли доступ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ доступ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ сСриализуСтся. Π’ случаС сСрвСра Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ сама Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² настоящСй Π³Π»Π°Π²Π΅, многопоточная модСль ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π² качСствС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹, располоТСнныС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ сСрвСра. 

β€’ Π’ соотвСтствии с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ БОМ ΠΎΠ± Π°ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ слСдуСт Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° назначаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Π°ΠΊ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ для осущСствлСния доступа ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ частям Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ сСриализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ СдинствСнного ΠΏΠΎΡ‚ΠΎΠΊΠ°.

β€’ ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ свободных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ назначаСтся Π΅ΠΌΡƒ ΠΈΠ· ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠΎ запросу. ΠžΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΠΉΡΡ Π² настоящСй Π³Π»Π°Π²Π΅ сСрвСр ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сСрвСром со свободными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Ссли соСдинСниС Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ запрос. Аналогично, Ссли сСрвСр Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… поддСрТиваСтся ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… соотвСтствуСт ΠΌΠΎΠ΄Π΅Π»ΠΈ свободных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

НСкоторыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ sortMT (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 7.2), Π² Ρ€Π°ΠΌΠΊΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· пСрСчислСнных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ВспомнитС Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌΠΈ ΡƒΠΆΠ΅ использовались ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, модСль "хозяин/Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ", ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрныС ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся общСпринятым, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ отраТСния Π² модСлях Microsoft.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования оказываСтся умСстным ΠΈ Π² Π³Π»Π°Π²Π΅ 12, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вводятся внутрипроцСссныС сСрвСры, ΠΈ компания Microsoft ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ части своСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ БОМ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ; ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ обсуТдСниС ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ контСкстС. БОМ β€” это слишком большой ΠΈ слоТный ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. Π’ спискС Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… свСдСний ΠΏΠΎ этому вопросу.

РСзюмС

ΠšΠ°Π½Π°Π»Ρ‹ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики Windows, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ мСТпроцСссноС ΠΈ сСтСвоС взаимодСйствиС. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… продСмонстрировано, ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ систСму. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°Π½Π°Π»Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ запись Π² ΠΊΠ°Π½Π°Π».

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…

Π’ Π³Π»Π°Π²Π΅ 12 для осущСствлСния мСТпроцСссного ΠΈ сСтСвого взаимодСйствия вмСсто ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Windows ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½Ρ‹ стандартныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠŸΡ€Π΅ΠΆΠ½ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрной систСмы ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½ с использованиСм стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ Π·Π° счСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ сСрвСрной части.

УпраТнСния

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