ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΡΠ΄ΡΡΠΈ ΡΠ°ΡΡΡΡ Π²ΡΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ UNIX, ΠΏΠΎΡΠΎΠΊΠΈ Pthreads Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΎΡ UNIX.
ΠΠ»Π°Π²Ρ 8-10: ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΠ±Π»Π°ΡΡΡ Windows UNIX/Pthreads ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ DeleteCriticalSection ΠΠ»Ρ ΡΠΌΡΠ»ΡΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΡ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ EnterCriticalSection ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ InitializeCriticalSection β Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ LeaveCriticalSection Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ CloseHandle (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠ±ΡΡΠΈΡ) pthread_cond_destroy Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ CreateEvent pthread_cond_init Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ PulseEvent pthread_cond_signal ΠΡΡΡΠ½ΡΡ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ ResetEvent - Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ SetEvent pthread_cond_broadcast ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ WaitForSingleObject (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠ±ΡΡΠΈΡ) pthread_cond_wait Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠΎΠ±ΡΡΠΈΡ WaitForSingleObject (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠ±ΡΡΠΈΡ) pthread_timed_wait Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΌΡΡΡΠ΅ΠΊΡΡ CloseHandle (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°) pthread_mutex_destroy Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΌΡΡΡΠ΅ΠΊΡΡ CreateMutex pthread_mutex_init Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΌΡΡΡΠ΅ΠΊΡΡ ReleaseMutex pthread_mutex_unlock Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΠΌΡΡΡΠ΅ΠΊΡΡ WaitForSingleObject(Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°) pthread_mutex_lock Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ CreateSemaphore semget Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ - semctl ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΉ Π² Windows ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ OpenSemaphore semget Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ReleaseSemaphore semop (+) Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ: ΡΠ΅ΠΌΠ°ΡΠΎΡΡ WaitForSingleObject (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°) semop (-) Windows ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΠ»Π°Π²Π° 11: ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΠ±Π»Π°ΡΡΡ Windows UNIX ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ IPC CallNamedPipe - - CreateFile, WriteFile, ReadFile, CloseHandle IPC CloseHandle (pipe handle) close, msgctl pclose IPC ConnectNamedPipe - - IPC CreateMailslot - - IPC CreateNamedPipe mkfifo, msgget - IPC CreatePipe pipe popen He ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘ β ΡΠΌ. [40] IPC DuplicateHandle dup, dup2, or fcntl - ΠΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² CONIN$, CONOUT$ IPC GetNamedPipeHandleState stat, fstat, lstat64 - IPC GetNamedPipeInfo stat, fstat, lstat - IPC ImpersonateNamedPipeClient - - IPC PeekNamedPipe - - IPC ReadFile (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°) read (fifo), msgsnd - IPC RevertToSelf - - IPC SetNamedPipeHandleState - - IPC TransactNamedPipe - - WriteFile; ReadFile IPC WriteFile (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°) write (fifo), msgrcv - Π Π°Π·Π½ΠΎΠ΅ GetComputerName uname - Π Π°Π·Π½ΠΎΠ΅ SetComputerName - - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetNamedPipeIdentity ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ Π±ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° - ΠΠ»Π°Π²Π° 14: Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΠΠ±Π»Π°ΡΡΡ Windows UNIX ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ GetOverlappedResult - - ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ReadFileEx - - Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π²Π²ΠΎΠ΄/ Π²ΡΠ²ΠΎΠ΄ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ SleepEx - - ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² Π΄Π΅ΠΆΡΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ WaitForMultipleObjects (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²) poll, select - ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ WaitForMultipleObjectsEx - - ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² Π΄Π΅ΠΆΡΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ WriteFileEx - - Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π²Π²ΠΎΠ΄/ Π²ΡΠ²ΠΎΠ΄ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ WaitForSingleObjectEx waitpid - ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² Π΄Π΅ΠΆΡΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΠ»Π°Π²Π° 15: ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Windows ΠΠ±Π»Π°ΡΡΡ Windows UNIX ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ AddAccessAllowedAce chmod, fchmod Π‘ΡΠ΅Π΄ΡΡΠ²Π° Π·Π°ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ AddAccessDeniedAce chmod, fchmod ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ AddAuditAce - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ CreatePrivateObjectSecurity - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ DeleteAce chmod, fchmod β ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ DestroyPrivateObjectSecurity - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ GetAce stat*, fstat*, lstat ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ GetAclInformation stat*, fstat*, lstat ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ GetFileSecurity stat*, fstat*, lstat ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ GetPrivateObjectSecurity - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ GetSecurityDescriptorDacl stat*, fstat*, lstat ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ GetUserName getlogin ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ InitializeAcl - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ InitializeSecurityDescriptor umask ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ LookupAccountName getpwnam, getgrnam ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ LookupAccountSid getpwuid, getuid, geteuid ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ - getpwend, setpwent, endpwent ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ - getgrent, setgrent, endgrent ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ - setuid, seteuid, setreuid ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ - setgid, setegid, setregid ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ OpenProcessToken getgroups, setgroups, initgroups ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetFileSecurity chmod*, fchmod ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetPrivateObjectSecurity - ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetSecurityDescriptorDacl umask ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetSecurityDescriptorGroup chown, fchown, lchown ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetSecurityDescriptorOwner chown, fchown, lchown ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ SetSecurityDescriptorSacl -ΠΠ ΠΠΠΠΠΠΠΠ Π