19

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

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

此外,如果 Linux 取消点与 POSIX 取消点不同,我也想要一份它们的列表。

4

3 回答 3

21

POSIX 1003.1-2003标准在系统接口部分给出了一个列表,然后是一般信息,然后是线程(直接链接由 A. Rex 提供)。(补充POSIX 1003.1-2008现已在网络上提供(它的所有 3872 页,PDF 和 HTML 格式)。您必须注册(免费)。我从Open Group 书店得到它。)

取消积分

当线程正在执行以下函数时,将出现取消点:

  • 接受()
  • aio_suspend()
  • 时钟纳米睡眠()
  • 关闭()
  • 连接()
  • 创建()
  • fcntl()(当 cmd 参数为 F_SETLKW 时)
  • 数据同步()
  • 同步()
  • 获取消息()
  • 获取pmsg()
  • 锁定函数()
  • mq_receive()
  • mq_send()
  • mq_timedreceive()
  • mq_timedsend()
  • msgrcv()
  • msgsnd()
  • 同步()
  • 纳米睡眠()
  • 打开()
  • 暂停()
  • 轮询()
  • 预读()
  • 选择()
  • 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()
  • sigsuspend()
  • sigtimedwait()
  • sigwait()
  • sigwaitinfo()
  • sleep()
  • system()
  • tcdrain()
  • usleep()
  • wait()
  • waidid()
  • waitpid()
  • write()
  • writev()


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


  • access()
  • 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() (For any value of the cmd argument. [Presumably except F_SETLKW which is listed.]
  • 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() (if opterr is non-zero.)
  • 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()
  • link()
  • 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()
  • rename()
  • rewind()
  • rewinddir()
  • scanf()
  • seekdir()
  • semop()
  • setgrent()
  • sethostent()
  • setnetent()
  • setprotoent()
  • setpwent()
  • setservent()
  • setutxent()
  • stat()
  • strerror()
  • strerror_r()
  • strftime()
  • symlink()
  • sync()
  • syslog()
  • tmpfile()
  • tmpnam()
  • ttyname()
  • ttyname_r()
  • tzset()
  • ungetc()
  • ungetwc()
  • unlink()
  • vfprintf()
  • vfwprintf()
  • vprintf()
  • vwprintf()
  • wcsftime()
  • wordexp()
  • wprintf()
  • wscanf()


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

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.

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.

于 2009-01-12T00:52:21.090 回答
5

See the pthread_cancel man page for further and fast info.

于 2010-10-08T10:29:58.357 回答
3

Additional Info: since kernel 2.6, Linux has used the NPTL thread library which is POSIX compliant, so cancellation points should be as above for recent Linux implmentations.

http://www.ddj.com/linux-open-source/184406204

于 2009-01-12T09:23:52.240 回答