} else {
printf("Process %d β unlocked region\n", getpid());
}
region_to_lock.l_type = F_UNLCK;
region_to_lock.l_whence = SEEK_SET;
region_to_lock.l_start = 0;
region_to_lock.l_len = 50;
printf("Process %d, trying F_UNLCK, region %d to %d\n", getpid()", (int)region_to_lock.l_start,
(int)(region_to_lock.l_start + region_to_lock.l_len));
res = fcntl(file_desc, F_SETLK, ®ion_to_lock);
if (res == -1) {
printf("Process %d β failed to unlock region\n", getpid());
} else {
printf("Process %d β unlocked region\n", getpid());
}
region_to_lock.l_type = F_WRLCK;
region_to_lock.l_whence = SEEK_SET;
region_to_lock.lstart = 16;
region_to_lock.l_len = 5;
printf("Process %d, trying F_WRLCK, region %d to %d\n", getpid(), (int)region_to_lock.l_start,
(int)(region_to_lock.l_start + region_to_lock.l_len));
res = fcntl(file_desc, F_SETLK, ®ion_to_lock);
if (res == -1) {
printf("Process %d β failed to lock region\n", getpid());
} else {
printf("Process %d β obtained lock on region\n", getpid());
}
region_to_lock.l_type = F_RDLCK;
region_to_lock.l_whence = SEEK_SET;
region_to_lock.l_start = 40;
region_to_lock.l_len = 10;
printf("Process %d, trying F_RDLCK, region %d to %d\n", getpid(), (int)region_to_lock.l_start,
(int)(region_to_lock.l_start + region_to_lock.l_len));
res = fcntl(filedesc, F_SETLK, ®ion_to_lock);
if (res == -1) {
printf("Process %d β failed to lock region\n", getpid());
} else {
printf("Process %d β obtained lock on region\n", getpid());
}
region_to_lock.l_type = F_WRLCK;
region_to_lock.l_whence = SEEK_SET;
region_to_lock.l_start = 16;
region_to_lock. l_len = 5;
printf("Process %d, trying F_WRLCK with wait, region %d to %d\n", getpid(), (int)region_to_lock.l_start,
(int)(region_to_lock.l_start + region_to_lock.l_len));
res = fcntl(file_desc, F_SETLKW, ®ion_to_lock);
if (res == -1) {
printf("Process %d β failed to lock region\n", getpid());
} else {
printf("Process %d β obtained lock, on region\n", getpid());
}
printf ("Process %d ending\n", getpid());
close(file_desc);
exit(EXIT_SUCCESS);
}
ΠΡΠ»ΠΈ Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ lock3 Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π΄Π°Π»Π΅Π΅ ΡΡΠ°Π·Ρ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
$ ./lock3 &
$ process 227 locking file
$ ./lock5
ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
Process 227 locking file
Process 228, trying F_RDLCK, region 10 to 15
Process 228 β obtained lock on region
Process 228, trying F_UNLCK, region 10 to 15
Process 228 β unlocked region
Process 228, trying F_UNLCK, region 0 to 50
Process 228 β unlocked region
Process 228, trying F_WRLCK, region 16 to 21
Process 228 β failed to lock on region
Process 228, trying F_RDLCK, region 4 0 to 50
Process 228 - failed to lock on region
Process 228, trying F_WRLCK with wait, region 16 to 21
Process 227 closing file
Process 228 β obtained lock on region
Process 228 ending
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΎΠΊ Ρ 10-Π³ΠΎ ΠΏΠΎ 15-ΠΉ Π±Π°ΠΉΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΈΠΏΠ°, Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ, ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Ρ ΡΡΠ°ΡΡΠΊΠ° ΡΠ°ΠΉΠ»Π°, ΠΈ ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠ°Π»Π΅Π΅ ΠΎΠ½Π° ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ 50 Π±Π°ΠΉΡΠΎΠ² ΡΠ°ΠΉΠ»Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ Π½ΠΈΡ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π½Π° ΡΡΠΎΡ ΡΡΠ°ΡΡΠΎΠΊ, ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΠ½ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΠ°ΡΠ°ΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΡΡ 50 Π±Π°ΠΉΡΠΎΠ² Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΎΠΊ Ρ 16-ΡΠΎ ΠΏΠΎ 21-ΠΉ Π±Π°ΠΉΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ. ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΠΎΠ²Π°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ, Ρ.ΠΊ. Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ±ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΡΡΠ°ΡΡΠΎΠΊ Ρ 40-Π³ΠΎ ΠΏΠΎ 50-ΠΉ Π±Π°ΠΉΡΡ. ΠΡΠ° ΠΎΠ±Π»Π°ΡΡΡ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ½ΠΎΠ²Π° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΏΡΡΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ ΡΡΠ°ΡΡΠΊΠ° Ρ 16-Π³ΠΎ ΠΏΠΎ 21-ΠΉ Π±Π°ΠΉΡΡ, Π½ΠΎ Π² ΡΡΠΎΡ ΡΠ°Π· ΠΎΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ F_SETLKW, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ ΠΆΠ΄Π°ΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°. Π Π²ΡΠ²ΠΎΠ΄Π΅ Π½Π°ΡΡΡΠΏΠ°Π΅Ρ Π΄ΠΎΠ»Π³Π°Ρ ΠΏΠ°ΡΠ·Π°, Π΄Π»ΡΡΠ°ΡΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° lock3, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π²ΡΠ°Ρ ΡΡΠΎΡ ΡΡΠ°ΡΡΠΎΠΊ, Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² sleep ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ», ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ½ΠΈΠΌΠ°Ρ Π²ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° lock5 Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΡΡΠΏΠ΅ΡΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΡΠ°ΡΡΠΎΠΊ ΡΠ°ΠΉΠ»Π° ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΎΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ.
ΠΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ
ΠΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² β ΡΡΠ½ΠΊΡΠΈΡ lockf. ΠΠ½Π° ΡΠΎΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
Π£ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ:
#include <unistd.h>
int lockf(int fildes, int function, off_t size_to_lock);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ function ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
β‘ F_ULOCK β ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ;
β‘ F_LOCK β Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΠΎ;
β‘ F_TLOCK β ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΠΎ;
β‘ F_TEST β ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ size_to_lock ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π±Π°ΠΉΡΠΎΠ², ΠΎΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ. Π£ ΡΡΠ½ΠΊΡΠΈΠΈ lockf Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ΅ΠΌ Ρ Π²ΡΠ·ΠΎΠ²Π° fcntl Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Ρ Π½Π΅Π΅ ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΉΡΠΈ Π½Π°ΡΠ°Π»ΠΎ ΡΡΠ°ΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ, Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΊΠ°Π·Π°Π² ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ Π±Π°ΠΉΡΠΎΠ².
ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ·ΠΎΠ²Π° fcntl, Π²ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠ΅; ΠΎΠ½ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΉΠ». ΠΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΎΡΠ²Π΅ΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡΠ΅ΠΊΡ ΠΎΡ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fcntl ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ lockf Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ±ΡΠ°ΡΡ, ΠΈ ΡΡΡΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ.
ΠΠ·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΡΠΌ Π±Π΅Π· ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ ΠΎΠ± ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈΠ»ΠΈ ΡΡΠΏΠΈΠΊΠΎΠ². ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΎΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ». ΠΠΌ ΠΎΠ±Π΅ΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π±Π°ΠΉΡ 1 ΠΈ Π±Π°ΠΉΡ 2 ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡΠ° 2, Π·Π°ΡΠ΅ΠΌ Π±Π°ΠΉΡΠ° 1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ½Π°ΡΠ°Π»Π° Π±Π°ΠΉΡ 1, Π·Π°ΡΠ΅ΠΌ Π±Π°ΠΉΡ 2.
ΠΠ±Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ°ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡ 2, Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π β Π±Π°ΠΉΡ 1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π ΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ Π±Π°ΠΉΡΠ° 1. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π ΠΆΠ΄Π΅Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π±Π°ΠΉΡ 2. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π ΡΠΎΠΆΠ΅ ΠΆΠ΄Π΅Ρ.
Π‘ΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ. ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π° Π² ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠ°ΡΡΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠΌ. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΡΡΡΠ°Π½ΡΡΡ ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ; ΡΠ΄ΡΠΎ Linux ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ. ΠΠ»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅Π³ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½Π΅Π΅ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ ΡΡΠΎΠΈΡ ΠΎΠΏΠ°ΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΆΠ΄ΡΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ: ΠΎΠ±Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΈΠΌ Π±Π°ΠΉΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅Π ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ° Ρ Π½Π°Ρ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎΠ±ΠΎΠ»ΡΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΊΠ½ΠΈΠ³Ρ: Ben-Ari Π. Principles of Concurrent and Distributed Programming. β Prentice Hall, 1990 (ΠΠ΅Π½-ΠΡΠΈ M. ΠΡΠΈΠ½ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ? ΠΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
β‘ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡ Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΄Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΡΡ Π½Π΅ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²;
β‘ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅ Ρ ΡΠ°Π½ΡΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π»Π΅Π³ΠΊΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ.
ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ dbm
ΠΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Linux ΠΈ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠΈΡΡΠ΅ΠΌ UNIX ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌ, Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ dbm. ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ dbm ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ°ΡΠΈΡΠ½Ρ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΎΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·ΡΠ°Π·ΠΈΡΡ, ΡΡΠΎ dbm β Π²ΠΎΠ²ΡΠ΅ Π½Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , Π° ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². Π‘ΡΠ°Π½Π΄Π°ΡΡ X/Open, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π°Π·ΡΠ²Π°Π΅Ρ dbm Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ Π΅Π΅ ΡΠ°ΠΊ ΠΆΠ΅.