Man page - pthreads(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr ja ruManual
pthreads
ΠΠΠΠΠΠΠΠΠΠΠΠΠΠΠΠ‘ΠΠΠΠ
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ pthreads
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ
ΠΠΈΡΠ΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Cancelation points
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Linux
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ POSIX Π² Linux
LinuxThreads
NPTL
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ
ΠΡΠ±ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ: LD_ASSUME_KERNEL
Π‘ΠΠΠ’Π ΠΠ’Π Π’ΠΠΠΠ
ΠΠΠ ΠΠΠΠ
ΠΠΠΠΠΠΠΠΠΠΠΠ
pthreads - Π½ΠΈΡΠΈ POSIX
ΠΠΠΠ‘ΠΠΠΠ
Π POSIX.1 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ) Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΡΡΠΌΠΈ, Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌΠΈ ΠΊΠ°ΠΊ Π½ΠΈΡΠΈ POSIX ΠΈΠ»ΠΈ Pthreads. Π ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΈΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΈ Π½ΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ (ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΡΡΠΈ), Π½ΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΊ (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅).
Π’Π°ΠΊΠΆΠ΅, Π² POSIX.1 ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π½ΠΈΡΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ±ΡΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π΄ΡΡΠ³ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (Ρ. Π΅., ΡΡΠΈ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π° Π½Π΅ Π½ΠΈΡΠΈ):
|
β’ |
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° |
||
|
β’ |
ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° |
||
|
β’ |
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ ΡΠ΅Π°Π½ΡΠ° |
||
|
β’ |
Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» |
||
|
β’ |
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΡ |
||
|
β’ |
ΠΡΠΊΡΡΡΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ |
||
|
β’ |
ΠΠ±ΡΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΡΠΌΠΎΡΡΠΈΡΠ΅ fcntl (2)) |
||
|
β’ |
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² |
||
|
β’ |
ΠΠ°ΡΠΊΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ ( umask (2)) |
||
|
β’ |
Π’Π΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ( chdir (2)) ΠΈ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ( chroot (2)) |
||
|
β’ |
ΠΠ½ΡΠ΅ΡΠ²Π°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΡ ( setitimer (2)) ΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΡ POSIX ( timer_create (2)) |
||
|
β’ |
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΠΏΡΠΈΠ²ΠΎΡΡΠΈ ( setpriority (2)) |
||
|
β’ |
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ ( setrlimit (2)) |
||
|
β’ |
ΠΠ·ΠΌΠ΅ΡΠΈΡΠ΅Π»ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π¦Π ( times (2)) ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² ( getrusage (2)) |
ΠΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΡΠ΅ΠΊΠ°, Π² POSIX.1 ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ:
|
β’ |
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ (ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ pthread_t ) |
|||
|
β’ |
ΠΠ°ΡΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ( pthread_sigmask (3)) |
|||
|
β’ |
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ errno |
|||
|
β’ |
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΡΠ΅ΠΊ ΡΠΈΠ³Π½Π°Π»Π° ( sigaltstack (2)) |
|||
|
β’ |
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ( sched (7)) |
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Linux ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ:
|
β’ |
ΠΌΠ°Π½Π΄Π°ΡΡ (ΡΠΌΠΎΡΡΠΈΡΠ΅ capabilities (7)) |
|||
|
β’ |
ΠΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΊ Π¦Π ( sched_setaffinity (2)) |
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ pthreads
Most pthreads functions return 0 on success, and an error number on failure. The error numbers that can be returned have the same meaning as the error numbers returned in errno by conventional system calls and C library functions. Note that the pthreads functions do not set errno . For each of the pthreads functions that can return an error, POSIX.1-2001 specifies that the function can never fail with the error EINTR .
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ
ΠΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ (ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ pthread_t ). ΠΡΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ pthread_create (3), Π° Π² ΡΠ°ΠΌΠΎΠΉ Π½ΠΈΡΠΈ Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pthread_self (3).
ΠΠ½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π½ΠΈΡΠ΅ΠΉ (Π²ΠΎ Π²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡΡ pthreads, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½ΠΈΡΠΈ, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½Π° Π½ΠΈΡΡ ΠΈΠ· ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ).
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΡΠ½Π½ΠΎΠΉ Π½ΠΈΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΡΠ½Π½ΠΎΠΉ Π½ΠΈΡΠΈ. Π POSIX ΡΠΊΠ°Π·Π°Π½ΠΎ: Β«ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΡΡΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ, ΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΒ».
ΠΠΈΡΠ΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠΈΡΠ΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ (Ρ. Π΅., ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π΅Π΄ΠΈΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ) Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π½ΠΈΡΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Π POSIX.1-2001 ΠΈ POSIX.1-2008 ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅, Π±ΡΠ»ΠΈ Π½ΠΈΡΠ΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ:
asctime()
basename()
catgets()
crypt()
ctermid() if passed a non-NULL argument
ctime()
dbm_clearerr()
dbm_close()
dbm_delete()
dbm_error()
dbm_fetch()
dbm_firstkey()
dbm_nextkey()
dbm_open()
dbm_store()
dirname()
dlerror()
drand48()
ecvt() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
encrypt()
endgrent()
endpwent()
endutxent()
fcvt() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
ftw()
gcvt() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
getc_unlocked()
getchar_unlocked()
getdate()
getenv()
getgrent()
getgrgid()
getgrnam()
gethostbyaddr() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
gethostbyname() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
gethostent()
getlogin()
getnetbyaddr()
getnetbyname()
getnetent()
getopt()
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwuid()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
gmtime()
hcreate()
hdestroy()
hsearch()
inet_ntoa()
l64a()
lgamma()
lgammaf()
lgammal()
localeconv()
localtime()
lrand48()
mrand48()
nftw()
nl_langinfo()
ptsname()
putc_unlocked()
putchar_unlocked()
putenv()
pututxline()
rand()
readdir()
setenv()
setgrent()
setkey()
setpwent()
setutxent()
strerror()
strsignal() [Added in POSIX.1-2008]
strtok()
system() [Added in POSIX.1-2008]
tmpnam() if passed a non-NULL argument
ttyname()
unsetenv()
wcrtomb() if its final argument is NULL
wcsrtombs() if its final argument is NULL
wcstombs()
wctomb()
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ (async-cancel-safe function) β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΡΠΌΠ΅Π½Π° (ΡΠΌΠΎΡΡΠΈΡΠ΅ pthread_setcancelstate (3)).
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ POSIX.1-2001 ΠΈ POSIX.1-2008 ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ:
pthread_cancel()
pthread_setcancelstate()
pthread_setcanceltype()
Cancelation points
POSIX.1 specifies that certain functions must, and certain other functions may, be cancelation points. If a thread is cancelable, its cancelability type is deferred, and a cancelation request is pending for the thread, then the thread is canceled when it calls a function that is a cancelation point.
The following functions are required to be cancelation points by POSIX.1-2001 and/or POSIX.1-2008:
accept()
aio_suspend()
clock_nanosleep()
close()
connect()
creat()
fcntl() F_SETLKW
fdatasync()
fsync()
getmsg()
getpmsg()
lockf() F_LOCK
mq_receive()
mq_send()
mq_timedreceive()
mq_timedsend()
msgrcv()
msgsnd()
msync()
nanosleep()
open()
openat()
[Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°
Π² POSIX.1-2008]
pause()
poll()
pread()
pselect()
pthread_cond_timedwait()
pthread_cond_wait()
pthread_join()
pthread_testcancel()
putmsg()
putpmsg()
pwrite()
read()
readv()
recv()
recvfrom()
recvmsg()
select()
sem_timedwait()
sem_wait()
send()
sendmsg()
sendto()
sigpause() [ΡΠΎΠ»ΡΠΊΠΎ
POSIX.1-2001
(ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½Π°
Π² ΡΠΏΠΈΡΠΎΠΊ
Β«ΠΌΠΎΠΆΠ΅ΡΒ» Π²
POSIX.1-2008)]
sigsuspend()
sigtimedwait()
sigwait()
sigwaitinfo()
sleep()
system()
tcdrain()
usleep() [ΡΠΎΠ»ΡΠΊΠΎ
POSIX.1-2001
(ΡΡΠ½ΠΊΡΠΈΡ
ΡΠ΄Π°Π»Π΅Π½Π° Π²
POSIX.1-2008)]
wait()
waitid()
waitpid()
write()
writev()
The following functions may be cancelation points according to POSIX.1-2001 and/or POSIX.1-2008:
access()
asctime()
asctime_r()
catclose()
catgets()
catopen()
chmod() [Added in POSIX.1-2008]
chown() [Added in POSIX.1-2008]
closedir()
closelog()
ctermid()
ctime()
ctime_r()
dbm_close()
dbm_delete()
dbm_fetch()
dbm_nextkey()
dbm_open()
dbm_store()
dlclose()
dlopen()
dprintf() [Added in POSIX.1-2008]
endgrent()
endhostent()
endnetent()
endprotoent()
endpwent()
endservent()
endutxent()
faccessat() [Added in POSIX.1-2008]
fchmod() [Added in POSIX.1-2008]
fchmodat() [Added in POSIX.1-2008]
fchown() [Added in POSIX.1-2008]
fchownat() [Added in POSIX.1-2008]
fclose()
fcntl() (for any value of cmd argument)
fflush()
fgetc()
fgetpos()
fgets()
fgetwc()
fgetws()
fmtmsg()
fopen()
fpathconf()
fprintf()
fputc()
fputs()
fputwc()
fputws()
fread()
freopen()
fscanf()
fseek()
fseeko()
fsetpos()
fstat()
fstatat() [Added in POSIX.1-2008]
ftell()
ftello()
ftw()
futimens() [Added in POSIX.1-2008]
fwprintf()
fwrite()
fwscanf()
getaddrinfo()
getc()
getc_unlocked()
getchar()
getchar_unlocked()
getcwd()
getdate()
getdelim() [Added in POSIX.1-2008]
getgrent()
getgrgid()
getgrgid_r()
getgrnam()
getgrnam_r()
gethostbyaddr() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
gethostbyname() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
gethostent()
gethostid()
gethostname()
getline() [Added in POSIX.1-2008]
getlogin()
getlogin_r()
getnameinfo()
getnetbyaddr()
getnetbyname()
getnetent()
getopt() (if opterr is nonzero)
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwnam_r()
getpwuid()
getpwuid_r()
gets()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
getwc()
getwchar()
getwd() [POSIX.1-2001 only (function removed in
POSIX.1-2008)]
glob()
iconv_close()
iconv_open()
ioctl()
link()
linkat() [Added in POSIX.1-2008]
lio_listio() [Added in POSIX.1-2008]
localtime()
localtime_r()
lockf() [Added in POSIX.1-2008]
lseek()
lstat()
mkdir() [Added in POSIX.1-2008]
mkdirat() [Added in POSIX.1-2008]
mkdtemp() [Added in POSIX.1-2008]
mkfifo() [Added in POSIX.1-2008]
mkfifoat() [Added in POSIX.1-2008]
mknod() [Added in POSIX.1-2008]
mknodat() [Added in POSIX.1-2008]
mkstemp()
mktime()
nftw()
opendir()
openlog()
pathconf()
pclose()
perror()
popen()
posix_fadvise()
posix_fallocate()
posix_madvise()
posix_openpt()
posix_spawn()
posix_spawnp()
posix_trace_clear()
posix_trace_close()
posix_trace_create()
posix_trace_create_withlog()
posix_trace_eventtypelist_getnext_id()
posix_trace_eventtypelist_rewind()
posix_trace_flush()
posix_trace_get_attr()
posix_trace_get_filter()
posix_trace_get_status()
posix_trace_getnext_event()
posix_trace_open()
posix_trace_rewind()
posix_trace_set_filter()
posix_trace_shutdown()
posix_trace_timedgetnext_event()
posix_typed_mem_open()
printf()
psiginfo() [Added in POSIX.1-2008]
psignal() [Added in POSIX.1-2008]
pthread_rwlock_rdlock()
pthread_rwlock_timedrdlock()
pthread_rwlock_timedwrlock()
pthread_rwlock_wrlock()
putc()
putc_unlocked()
putchar()
putchar_unlocked()
puts()
pututxline()
putwc()
putwchar()
readdir()
readdir_r()
readlink() [Added in POSIX.1-2008]
readlinkat() [Added in POSIX.1-2008]
remove()
rename()
renameat() [Added in POSIX.1-2008]
rewind()
rewinddir()
scandir() [Added in POSIX.1-2008]
scanf()
seekdir()
semop()
setgrent()
sethostent()
setnetent()
setprotoent()
setpwent()
setservent()
setutxent()
sigpause() [Added in POSIX.1-2008]
stat()
strerror()
strerror_r()
strftime()
symlink()
symlinkat() [Added in POSIX.1-2008]
sync()
syslog()
tmpfile()
tmpnam()
ttyname()
ttyname_r()
tzset()
ungetc()
ungetwc()
unlink()
unlinkat() [Added in POSIX.1-2008]
utime() [Added in POSIX.1-2008]
utimensat() [Added in POSIX.1-2008]
utimes() [Added in POSIX.1-2008]
vdprintf() [Added in POSIX.1-2008]
vfprintf()
vfwprintf()
vprintf()
vwprintf()
wcsftime()
wordexp()
wprintf()
wscanf()
An implementation may also mark other functions not specified in the standard as cancelation points. In particular, an implementation is likely to mark any nonstandard function that may block as a cancelation point. (This includes most functions that can touch files.)
It should be noted that even if an application is not using asynchronous cancelation, that calling a function from the above list from an asynchronous signal handler may cause the equivalent of asynchronous cancelation. The underlying user code may not expect asynchronous cancelation and the state of the user data may become inconsistent. Therefore signals should be used with caution when entering a region of deferred cancelation.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² Linux
Π Linux, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ pthreads, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ cc -pthread .
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ POSIX Π² Linux
ΠΠ°
Π²ΡΡ Π²ΡΠ΅ΠΌΡ
Π²
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅
GNU C Π±ΡΠ»ΠΎ Π΄Π²Π΅
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
Π½ΠΈΡΠ΅ΠΉ Π΄Π»Ρ
Linux:
LinuxThreads
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ pthreads. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ glibc 2.4 ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ.
NPTL (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½ΠΈΡΠ΅ΠΉ POSIX)
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ pthreads. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ LinuxThreads, NPTL Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ POSIX.1 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½Π° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½ΠΈΡΠ΅ΠΉ. NPTL ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² glibc Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 2.3.2, ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΠ΅ΡΡ Π² ΡΠ΄ΡΠ΅ Linux 2.6.
ΠΠ±Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ 1:1, ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ Π½ΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ΄ΡΠ°. ΠΠ±Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Linux clone (2). Π NPTL ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ (ΠΌΡΡΡΠ΅ΠΊΡΡ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ ΠΈ Ρ .ΠΏ.) ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Linux futex (2).
LinuxThreads
ΠΡΠ»ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
|
β’ |
Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ (Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ) Π½ΠΈΡΠΈ, Π½ΠΈΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pthread_create (3), ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡ Β«ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡΒ» Π½ΠΈΡΡ. ΠΡΠ° Π½ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ (ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, Π΅ΡΠ»ΠΈ ΡΡΠ° Π½ΠΈΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ). |
||
|
β’ |
ΠΠ½ΡΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Ρ. Π Linux 2.2 ΠΈ Π½ΠΎΠ²Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (ΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ signal (7)). Π ΡΡΠ°ΡΡΡ ΡΠ΄ΡΠ°Ρ Linux ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Ρ SIGUSR1 ΠΈ SIGUSR2 . Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ ID ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π½ΠΈΡΠΈ LinuxThreads ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ, Ρ ΠΊΠΎΡΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ, Π½ΠΎ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°). ΠΠΈΡΠΈ LinuxThreads (Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½ΠΈΡΡ) Π² ps (1) Π²ΠΈΠ΄ΠΈΠΌΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ. |
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ LinuxThreads ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ΅ΡΡΡ ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ POSIX.1 Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ , Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:
|
β’ |
ΠΡΠ·ΠΎΠ² getpid (2) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ. |
||
|
β’ |
ΠΡΠ·ΠΎΠ² getppid (2) Π² Π½ΠΈΡΡΡ , ΠΊΡΠΎΠΌΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ Π½ΠΈΡΠΈ; Π²ΠΌΠ΅ΡΡΠΎ getppid (2) Π² ΡΡΠΈΡ Π½ΠΈΡΡΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΡΠΎΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΈ ΠΈΠ· getppid (2) Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡΠΈ. |
||
|
β’ |
ΠΠΎΠ³Π΄Π° Π½ΠΈΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fork (2), Π²ΡΠ΅ Π½ΠΈΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π² wait (2). ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ wait (2) ΡΠΎΠ»ΡΠΊΠΎ Π² Π½ΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π»Π° ΠΏΠΎΡΠΎΠΌΠΊΠ°. |
||
|
β’ |
ΠΠΎΠ³Π΄Π° Π½ΠΈΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ execve (2), ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π½ΠΈΡΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ (ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ POSIX.1). ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ PID, ΡΡΠΎ ΠΈ Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·Π²Π°Π»Π° execve (2): ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡ ΠΆΠ΅ PID, ΡΡΠΎ ΠΈ Ρ Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡΠΈ. |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Ρ set-user-ID ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ pthreads, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ²ΠΎΠΈ ΡΡΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ seteuid (2) ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ ID ΡΠ΅Π°Π½ΡΠ° ΠΈ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°Ρ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ fcntl (2). |
||
|
β’ |
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ times (2) ΠΈ getrusage (2), ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ Π½ΠΈΡΠΈ, Π° Π½Π΅ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ. |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΌΠ΅Π½ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² (ΡΠΌΠΎΡΡΠΈΡΠ΅ semop (2)). |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ². |
||
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΡΠΏΡΠΈΠ²ΠΎΡΡΠΈ. |
||
|
β’ |
Π POSIX.1 ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΡΠΈΠ³Π½Π°Π»Ρ, Π°Π΄ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π½ΠΈΡΡΠΌ. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ POSIX.1, ΡΠΈΠ³Π½Π°Π»Ρ, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ (ΠΏΠΎΡΠ»Π°Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ kill (2)), Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. LinuxThreads Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ: ΡΠΈΠ³Π½Π°Π»Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠ»Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ Π½ΠΈΡΡΠΌ. |
||
|
β’ |
ΠΠΈΡΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, Π½ΠΎΠ²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΠΈΠ· Π½ΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½ΠΈΡΠΈ ΠΈΠΌΠ΅ΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΡΠ΅ΠΊ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² (Π½ΠΎΠ²Π°Ρ Π½ΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π±Π΅Π· Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΎΠ². ΠΡΠ»ΠΈ Π΄Π²Π΅ Π½ΠΈΡΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΡΡΠ΅ΠΊΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°). |
NPTL
Π NPTL Π²ΡΠ΅ Π½ΠΈΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΎΠ΄Π½Ρ Π³ΡΡΠΏΠΏΡ Π½ΠΈΡΠ΅ΠΉ; Π²ΡΠ΅ ΡΠ»Π΅Π½Ρ Π³ΡΡΠΏΠΏΡ Π½ΠΈΡΠ΅ΠΉ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ PID. Π NPTL Π½Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ Π½ΠΈΡΠΈ.
ΠΠ½ΡΡΡΠΈ NPTL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΠΈΠ³Π½Π°Π»Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ; ΡΡΠΈ ΡΠΈΠ³Π½Π°Π»Ρ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌΠΎΡΡΠΈΡΠ΅ Π² nptl (7).
NPTL ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ POSIX.1, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, Π² ΠΎΠ΄Π½ΠΎΠΌ:
|
β’ |
Π£ Π½ΠΈΡΠ΅ΠΉ ΡΠ°Π·Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΡΠΏΡΠΈΠ²ΠΎΡΡΠΈ. |
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΉ NPTL ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΠ°ΡΡΠΌΠΈ ΡΠ΄ΡΠ°ΠΌΠΈ:
|
β’ |
The information returned by times (2) and getrusage (2) is per-thread rather than process-wide (fixed in Linux 2.6.9). |
||
|
β’ |
Threads do not share resource limits (fixed in Linux 2.6.10). |
||
|
β’ |
Threads do not share interval timers (fixed in Linux 2.6.12). |
||
|
β’ |
Only the main thread is permitted to start a new session using setsid (2) (fixed in Linux 2.6.16). |
||
|
β’ |
Only the main thread is permitted to make the process into a process group leader using setpgid (2) (fixed in Linux 2.6.16). |
||
|
β’ |
Threads have distinct alternate signal stack settings. However, a new threadβs alternate signal stack settings are copied from the thread that created it, so that the threads initially share an alternate signal stack (fixed in Linux 2.6.16). |
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ NPTL:
|
β’ |
ΠΡΠ»ΠΈ ΠΌΡΠ³ΠΊΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° (ΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ RLIMIT_STACK Π² setrlimit (2)) ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ unlimited , ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ Π½ΠΈΡΠ΅ΠΉ. Π ΡΠ΅Π»ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ulimit -s ( limit stacksize Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ C). |
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ glibc 2.3.2, Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ getconf (1), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
bash$ getconf
GNU_LIBPTHREAD_VERSION
NPTL 2.3.4
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ glibc ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
bash$ $( ldd
/bin/ls | grep libc.so | awk '{print $3}' ) | \
egrep -i 'threads|nptl'
Native POSIX Threads Library by Ulrich Drepper et al
ΠΡΠ±ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ: LD_ASSUME_KERNEL
Π ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ glibc, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈ LinuxThreads ΠΈ NPTL (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, glibc 2.3. x ), ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ LD_ASSUME_KERNEL Π΄Π»Ρ Π·Π°ΠΌΠ΅Π½Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΠ΄ΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. Π£ΠΊΠ°Π·Π°Π² Π²Π΅ΡΡΠΈΡ ΡΠ΄ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ NPTL, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ LinuxThreads (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° (ΡΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠ³ΠΎ) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ LinuxThreads). ΠΡΠΈΠΌΠ΅Ρ:
bash$ $(
LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \
awk '{print $3}' ) | egrep -i 'threads|nptl'
linuxthreads-0.10 by Xavier Leroy
Π‘ΠΠΠ’Π ΠΠ’Π Π’ΠΠΠΠ
clone (2), fork (2), futex (2), gettid (2), proc (5), attributes (7), futex (7), nptl (7), sigevent (3type), signal (7)
Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ pthreads, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: pthread_atfork (3), pthread_attr_init (3), pthread_cancel (3), pthread_cleanup_push (3), pthread_cond_signal (3), pthread_cond_wait (3), pthread_create (3), pthread_detach (3), pthread_equal (3), pthread_exit (3), pthread_key_create (3), pthread_kill (3), pthread_mutex_lock (3), pthread_mutex_unlock (3), pthread_mutexattr_destroy (3), pthread_mutexattr_init (3), pthread_once (3), pthread_spin_init (3), pthread_spin_lock (3), pthread_rwlockattr_setkind_np (3), pthread_setcancelstate (3), pthread_setcanceltype (3), pthread_setspecific (3), pthread_sigmask (3), pthread_sigqueue (3) ΠΈ pthread_testcancel (3)
ΠΠΠ ΠΠΠΠ
Π ΡΡΡΠΊΠΈΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»(ΠΈ) Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Darima Kogan <silverdk99@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, ΠΠ²Π°Π½ ΠΠ°Π²Π»ΠΎΠ² <pavia00@gmail.com> ΠΈ Kirill Rekhov <krekhov.dev@gmail.com>
ΠΡΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ; ΠΎΠ½ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html Π²Π΅ΡΡΠΈΠΈ 3 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ) Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π°Π²ΡΠΎΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠ°Π²Π°, Π½ΠΎ ΠΠΠ ΠΠΠΠΠ₯-ΠΠΠΠ ΠΠΠ ΠΠΠ’ΠΠ.
ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠΎΠΎΠ±ΡΠΈΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ(Π°ΠΌ) ΠΏΠΎ Π΅Π³ΠΎ(ΠΈΡ ) Π°Π΄ΡΠ΅ΡΡ(Π°ΠΌ) ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΡΠΏΠΈΡΠΊΠ° ΡΠ°ΡΡΡΠ»ΠΊΠΈ ΡΡΡΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠΎΠ² .