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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 249

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

2. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° основная опСрация

read
, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ с сСрвСра ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ элСмСнты Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

int read_resp_from_server(message_db_t *rec_ptr) {

Β int read_bytes;

Β int return_code = 0;

#if DEBUG_TRACE

Β printf("%d :- reader_resp_from_server()\n", getpid());

Β #endif

Β if (!rec_ptr) return(0);

Β if (client_fd = -1) return(0);

Β read_bytes = read(client_fd, rec_ptr, sizeof(*rec_ptr));

Β if (read_bytes = sizeof(*rec_ptr)) return_code = 1;

Β return(return_code);

}

3. И Π² Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° клиСнтская функция, ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‰Π°Ρ ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра.

void end_resp_from_server(void) {

#if DEBUG_TRACE

Β printf("%d :- end_resp_from_server()\n", getpid());

#endif

Β /* Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π° эта функция пустая */

}

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²

open
ΠΊΠ°Π½Π°Π»Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для записи Π²
start_resp_from_server

client_write_fd = open(client_pipe_name, O_WRONLY);

примСняСтся для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ситуации Π³ΠΎΠ½ΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° сСрвСру Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ быстро ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° нСсколько запросов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°,

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ стало понятнСС, рассмотрим Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ событий:

1.Β ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΈΡˆΠ΅Ρ‚ запрос ΠΊ сСрвСру.

2.Β Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ запрос, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚, Π½ΠΎ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ успССт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

3.Β ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» для чтСния, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ свой ΠΊΠ°Π½Π°Π».

4.Β Π”Π°Π»Π΅Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ посылаСт Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ клиСнтский ΠΊΠ°Π½Π°Π» для чтСния.

5.Β Π‘Π΅Ρ€Π²Π΅Ρ€ возобновляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ, закрывая свой ΠΊΠΎΠ½Π΅Ρ† клиСнтского ΠΊΠ°Π½Π°Π»Π°.

К соТалСнию, Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пытаСтся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° свой ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос, Π½ΠΎ

read
Π²Π΅Ρ€Π½Π΅Ρ‚ 0 Π±Π°ΠΉΡ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π» клиСнтский ΠΊΠ°Π½Π°Π» для записи.

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

РСзюмС, ΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π΅ΡΡ прилоТСния

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

РСзюмС 

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ рассмотрСли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°Π½Π°Π»ΠΎΠ². Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ познакомились с Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ

popen
ΠΈΠ»ΠΈ
pipe
, ΠΈ посмотрСли, ΠΊΠ°ΠΊ, примСняя ΠΊΠ°Π½Π°Π» ΠΈ Π²Ρ‹Π·ΠΎΠ²
dup
, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² стандартный Π²Π²ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π”Π°Π»Π΅Π΅ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсвязанными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚- сСрвСрного прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°Π½Π°Π»Ρ‹ FIFO для обСспСчСния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синхронизации процСссов, Π½ΠΎ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ….Β 

Π“Π»Π°Π²Π° 14

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ обсудим Π½Π°Π±ΠΎΡ€ срСдств, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… взаимодСйствиС процСссов ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² вСрсии ОБ UNIX AT&T System V.2. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС эти срСдства появились Π² ΠΎΠ΄Π½ΠΎΠΌ выпускС систСмы ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ интСрфСйсом, ΠΈΡ… часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ срСдствами IPC (Inter-Process Communication, взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами) ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎ System V IPC. Как Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ СдинствСнный способ установлСния связи ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "System V IPC" ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся для обозначСния ΠΈΠΌΠ΅Π½Π½ΠΎ этих ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… срСдств.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:

░ сСмафоры для управлСния доступом ΠΊ рСсурсам;

░ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ для эффСктивного использования ΠΎΠ±Ρ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ;

β–‘Β ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΈΠΉ способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ.

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

Когда Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… систСм ΠΈΠ»ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ выясняСтся, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅ΡΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ СдинствСнному процСссу (ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ исполнСния) ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ рСсурсу.

Π£ сСмафоров слоТный ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс. Но, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π²Ρ‹ смоТСтС ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сущСствСнно, ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, достаточный для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… программирования сСмафоров.Β 

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

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

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСмафоров, примСняСмыС Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΠ΅ΡΡ Π² Π³Π»Π°Π²Π΅ 12, Π½Π΅ относятся ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ функциям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассматриваСм Π² этой Π³Π»Π°Π²Π΅, поэтому Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΈ Π½Π΅ ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ этих Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ².

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ рСсурсу, Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ слоТно, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сущСствуСт Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, извСстноС ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π”Π΅ΠΊΠΊΠ΅Ρ€Π° (Dekker's Algorithm). К соТалСнию, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ полагаСтся Π½Π° состояниС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ оТидания ΠΈΠ»ΠΈ спин-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ процСсс выполняСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ, оТидая измСнСния адрСса памяти. Π’ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠΉ срСдС, ΠΊΠ°ΠΊΠΎΠΉ являСтся ОБ Linux, это Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ расходы рСсурсов ЦПУ. Битуация сущСствСнно облСгчаСтся, ΠΊΠΎΠ³Π΄Π° для обСспСчСния монопольного доступа Π΅ΡΡ‚ΡŒ аппаратная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ЦПУ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° обращСния ΠΊ рСсурсу ΠΈ приращСния рСгистра Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ никакая другая ΠΊΠΎΠΌΠ°Π½Π΄Π° (Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅) Π½Π΅ ΠΌΠΎΠ³Π»Π° ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ опСрациями чтСния/ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°/записи.