POSIX 取消点是什么? [英] What are the POSIX cancellation points?

查看:34
本文介绍了POSIX 取消点是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

POSIX 取消点是什么?我正在寻找 POSIX 取消点的明确列表.

What are the POSIX cancellation points? I'm looking for a definitive list of POSIX cancellation points.

我之所以这么问是因为我有一本书说 accept()select() 是取消点,但我看到互联网上的网站声称他们不是.

I'm asking because I have a book that says accept() and select() are cancellation points, but I've seen sites on the internet claim that they are not.

此外,如果 Linux 取消点与 POSIX 取消点不同,我也需要它们的列表.

Also, if Linux cancellation points are different than POSIX cancellation points I want a list of them too.

推荐答案

POSIX 1003.1-2003 标准在系统接口部分给出了一个列表,然后是一般信息,然后是线程(直接链接 由 A. Rex 提供).(已添加:POSIX 1003.1-2008 现已可用在网络上(全部 3872 页,PDF 和 HTML).你必须注册(免费).我是从 打开团体书店.)

The POSIX 1003.1-2003 standard gives a list in the System Interfaces section, then General Information, then Threads (direct link courtesy of A. Rex). (Added: POSIX 1003.1-2008 is now available on the web (all 3872 pages of it, in PDF and HTML). You have to register (free). I got to it from the Open Group Bookstore.)

当一个线程正在执行以下功能时会出现取消点:

Cancellation points shall occur when a thread is executing the following functions:

  • 接受()
  • aio_suspend()
  • clock_nanosleep()
  • 关闭()
  • connect()
  • 创建()
  • fcntl() (当 cmd 参数为 F_SETLKW 时)
  • fdatasync()
  • fsync()
  • getmsg()
  • getpmsg()
  • lockf()
  • mq_receive()
  • mq_send()
  • mq_timedreceive()
  • mq_timedsend()
  • msgrcv()
  • msgsnd()
  • msync()
  • nanosleep()
  • 打开()
  • 暂停()
  • 轮询()
  • 预读()
  • pselect()
  • pthread_cond_timedwait()
  • pthread_cond_wait()
  • pthread_join()
  • pthread_testcancel()
  • putmsg()
  • putpmsg()
  • pwrite()
  • 读取()
  • readv()
  • recv()
  • recvfrom()
  • recvmsg()
  • select()
  • sem_timedwait()
  • sem_wait()
  • 发送()
  • sendmsg()
  • sendto()
  • sigpause()
  • sigsuspend()
  • sigtimedwait()
  • sigwait()
  • sigwaitinfo()
  • 睡眠()
  • 系统()
  • tcdrain()
  • usleep()
  • 等待()
  • waidid()
  • waitpid()
  • 写()
  • writev()


当线程正在执行以下功能时,也可能出现取消点:

A cancellation point may also occur when a thread is executing the following functions:


  • 访问()
  • asctime()
  • asctime_r()
  • catclose()
  • catgets()
  • catopen()
  • closedir()
  • closelog()
  • ctermid()
  • ctime()
  • ctime_r()
  • dbm_close()
  • dbm_delete()
  • dbm_fetch()
  • dbm_nextkey()
  • dbm_open()
  • dbm_store()
  • dlclose()
  • dlopen()
  • endgrent()
  • endhostent()
  • endnetent()
  • endprotoent()
  • endpwent()
  • endservent()
  • endutxent()
  • fclose()
  • fcntl()(对于 cmd 参数的任何值.[大概除了列出的 F_SETLKW.]
  • fflush()
  • fgetc()
  • fgetpos()
  • fgets()
  • fgetwc()
  • fgetws()
  • fmtmsg()
  • fopen()
  • fpathconf()
  • fprintf()
  • fputc()
  • fputs()
  • fputwc()
  • fputws()
  • fread()
  • freopen()
  • fscanf()
  • fseek()
  • fseeko()
  • fsetpos()
  • fstat()
  • ftell()
  • ftello()
  • ftw()
  • fwprintf()
  • fwrite()
  • fwscanf()
  • getaddrinfo()
  • getc()
  • getc_unlocked()
  • getchar()
  • getchar_unlocked()
  • getcwd()
  • getdate()
  • getgrent()
  • getgrgid()
  • getgrgid_r()
  • getgrnam()
  • getgrnam_r()
  • gethostbyaddr()
  • gethostbyname()
  • gethostent()
  • gethostid()
  • gethostname()
  • getlogin()
  • getlogin_r()
  • getnameinfo()
  • getnetbyaddr()
  • getnetbyname()
  • getnetent()
  • getopt()(如果 opterr 非零.)
  • getprotobyname()
  • getprotobynumber()
  • getprotoent()
  • getpwent()
  • getpwnam()
  • getpwnam_r()
  • getpwuid()
  • getpwuid_r()
  • gets()
  • getservbyname()
  • getservbyport()
  • getservent()
  • getutxent()
  • getutxid()
  • getutxline()
  • getwc()
  • getwchar()
  • getwd()
  • glob()
  • iconv_close()
  • iconv_open()
  • ioctl()
  • 链接()
  • localtime()
  • localtime_r()
  • lseek()
  • lstat()
  • 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_getne
  • posix_trace_eventtypelist_rewin
  • 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()
  • 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()
  • remove()
  • 重命名()
  • 倒带()
  • rewinddir()
  • scanf()
  • seekdir()
  • semop()
  • setgrent()
  • sethostent()
  • setnetent()
  • setprotoent()
  • setpwent()
  • setservent()
  • setutxent()
  • stat()
  • strerror()
  • strerror_r()
  • strftime()
  • 符号链接()
  • 同步()
  • 系统日志()
  • tmpfile()
  • tmpnam()
  • ttyname()
  • ttyname_r()
  • tzset()
  • ungetc()
  • ungetwc()
  • 取消链接()
  • vfprintf()
  • vfwprintf()
  • vprintf()
  • vwprintf()
  • wcsftime()
  • wordexp()
  • wprintf()
  • wscanf()


实施不得将取消点引入本 IEEE Std 1003.1-2001 中指定的任何其他函数中.

An implementation shall not introduce cancellation points into any other functions specified in this volume of IEEE Std 1003.1-2001.

在函数调用期间暂停时处理取消请求的副作用与在单线程程序中可能看到的副作用相同,当对函数的调用被信号中断时,给定的函数返回 [EINTR].任何此类副作用都会在调用任何取消清理处理程序之前发生.

The side effects of acting upon a cancellation request while suspended during a call of a function are the same as the side effects that may be seen in a single-threaded program when a call to a function is interrupted by a signal and the given function returns [EINTR]. Any such side effects occur before any cancellation cleanup handlers are called.

每当一个线程启用了可取消性并且以该线程为目标发出取消请求,然后该线程调用任何作为取消点的函数(例如 pthread_testcancel() 或 read()),取消请求应在函数返回之前执行.如果一个线程启用了可取消性,并且当线程在取消点挂起时以该线程为目标发出取消请求,则该线程将被唤醒并对取消请求采取行动.但是,如果线程在取消点挂起并且它正在等待的事件发生在取消请求被执行之前,则不确定是取消请求被执行还是取消请求保持挂起并且线程恢复正常执行.

Whenever a thread has cancelability enabled and a cancellation request has been made with that thread as the target, and the thread then calls any function that is a cancellation point (such as pthread_testcancel() or read()), the cancellation request shall be acted upon before the function returns. If a thread has cancelability enabled and a cancellation request is made with the thread as a target while the thread is suspended at a cancellation point, the thread shall be awakened and the cancellation request shall be acted upon. However, if the thread is suspended at a cancellation point and the event for which it is waiting occurs before the cancellation request is acted upon, it is unspecified whether the cancellation request is acted upon or whether the cancellation request remains pending and the thread resumes normal execution.

呃!无法让表格很好地工作,它在预览中看起来不错,之后就没有表格了.查看网址获取信息!有很多可能的取消点.

Ugh! Can't get the table to work very well it looked OK in preview and nothing like a table afterwards. Look at the URL for the information! There are a lot of possible cancellation points.

这篇关于POSIX 取消点是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆