Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>The <a href="http://www.opengroup.org/onlinepubs/009695399/toc.htm" rel="noreferrer">POSIX 1003.1-2003</a> standard gives a list in the System Interfaces section, then General Information, then Threads (<a href="http://www.opengroup.org/onlinepubs/000095399/functions/xsh_chap02_09.html#tag_02_09_05_02" rel="noreferrer">direct link</a> courtesy of A. Rex). (<em>Added</em>: <a href="http://www.opengroup.org/onlinepubs/9699919799/toc.htm" rel="noreferrer">POSIX 1003.1-2008</a> 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 <a href="http://www.opengroup.org/bookstore/catalog/c082.htm" rel="noreferrer">Open Group Bookstore</a>.)</p> <h2>Cancellation Points</h2> <blockquote> <p>Cancellation points shall occur when a thread is executing the following functions:</p> <ul> <li>accept()</li> <li>aio_suspend()</li> <li>clock_nanosleep()</li> <li>close()</li> <li>connect()</li> <li>creat()</li> <li>fcntl() (When the cmd argument is F_SETLKW)</li> <li>fdatasync()</li> <li>fsync()</li> <li>getmsg()</li> <li>getpmsg()</li> <li>lockf()</li> <li>mq_receive()</li> <li>mq_send()</li> <li>mq_timedreceive()</li> <li>mq_timedsend()</li> <li>msgrcv()</li> <li>msgsnd()</li> <li>msync()</li> <li>nanosleep()</li> <li>open()</li> <li>pause()</li> <li>poll()</li> <li>pread()</li> <li>pselect()</li> <li>pthread_cond_timedwait()</li> <li>pthread_cond_wait()</li> <li>pthread_join()</li> <li>pthread_testcancel()</li> <li>putmsg()</li> <li>putpmsg()</li> <li>pwrite()</li> <li>read()</li> <li>readv()</li> <li>recv()</li> <li>recvfrom()</li> <li>recvmsg()</li> <li>select()</li> <li>sem_timedwait()</li> <li>sem_wait()</li> <li>send()</li> <li>sendmsg()</li> <li>sendto()</li> <li>sigpause()</li> <li>sigsuspend()</li> <li>sigtimedwait()</li> <li>sigwait()</li> <li>sigwaitinfo()</li> <li>sleep()</li> <li>system()</li> <li>tcdrain()</li> <li>usleep()</li> <li>wait()</li> <li>waidid()</li> <li>waitpid()</li> <li>write()</li> <li>writev()</li> </ul> </blockquote> <p><br></p> <blockquote> <p>A cancellation point may also occur when a thread is executing the following functions:</p> </blockquote> <p><br></p> <blockquote> <ul> <li>access()</li> <li>asctime()</li> <li>asctime_r()</li> <li>catclose()</li> <li>catgets()</li> <li>catopen()</li> <li>closedir()</li> <li>closelog()</li> <li>ctermid()</li> <li>ctime()</li> <li>ctime_r()</li> <li>dbm_close()</li> <li>dbm_delete()</li> <li>dbm_fetch()</li> <li>dbm_nextkey()</li> <li>dbm_open()</li> <li>dbm_store()</li> <li>dlclose()</li> <li>dlopen()</li> <li>endgrent()</li> <li>endhostent()</li> <li>endnetent()</li> <li>endprotoent()</li> <li>endpwent()</li> <li>endservent()</li> <li>endutxent()</li> <li>fclose()</li> <li>fcntl() (For any value of the cmd argument. [Presumably except F_SETLKW which is listed.]</li> <li>fflush()</li> <li>fgetc()</li> <li>fgetpos()</li> <li>fgets()</li> <li>fgetwc()</li> <li>fgetws()</li> <li>fmtmsg()</li> <li>fopen()</li> <li>fpathconf()</li> <li>fprintf()</li> <li>fputc()</li> <li>fputs()</li> <li>fputwc()</li> <li>fputws()</li> <li>fread()</li> <li>freopen()</li> <li>fscanf()</li> <li>fseek()</li> <li>fseeko()</li> <li>fsetpos()</li> <li>fstat()</li> <li>ftell()</li> <li>ftello()</li> <li>ftw()</li> <li>fwprintf()</li> <li>fwrite()</li> <li>fwscanf()</li> <li>getaddrinfo()</li> <li>getc()</li> <li>getc_unlocked()</li> <li>getchar()</li> <li>getchar_unlocked()</li> <li>getcwd()</li> <li>getdate()</li> <li>getgrent()</li> <li>getgrgid()</li> <li>getgrgid_r()</li> <li>getgrnam()</li> <li>getgrnam_r()</li> <li>gethostbyaddr()</li> <li>gethostbyname()</li> <li>gethostent()</li> <li>gethostid()</li> <li>gethostname()</li> <li>getlogin()</li> <li>getlogin_r()</li> <li>getnameinfo()</li> <li>getnetbyaddr()</li> <li>getnetbyname()</li> <li>getnetent()</li> <li>getopt() (if <em>opterr</em> is non-zero.)</li> <li>getprotobyname()</li> <li>getprotobynumber()</li> <li>getprotoent()</li> <li>getpwent()</li> <li>getpwnam()</li> <li>getpwnam_r()</li> <li>getpwuid()</li> <li>getpwuid_r()</li> <li>gets()</li> <li>getservbyname()</li> <li>getservbyport()</li> <li>getservent()</li> <li>getutxent()</li> <li>getutxid()</li> <li>getutxline()</li> <li>getwc()</li> <li>getwchar()</li> <li>getwd()</li> <li>glob()</li> <li>iconv_close()</li> <li>iconv_open()</li> <li>ioctl()</li> <li>link()</li> <li>localtime()</li> <li>localtime_r()</li> <li>lseek()</li> <li>lstat()</li> <li>mkstemp()</li> <li>mktime()</li> <li>nftw()</li> <li>opendir()</li> <li>openlog()</li> <li>pathconf()</li> <li>pclose()</li> <li>perror()</li> <li>popen()</li> <li>posix_fadvise()</li> <li>posix_fallocate()</li> <li>posix_madvise()</li> <li>posix_openpt()</li> <li>posix_spawn()</li> <li>posix_spawnp()</li> <li>posix_trace_clear()</li> <li>posix_trace_close()</li> <li>posix_trace_create()</li> <li>posix_trace_create_withlog()</li> <li>posix_trace_eventtypelist_getne</li> <li>posix_trace_eventtypelist_rewin</li> <li>posix_trace_flush()</li> <li>posix_trace_get_attr()</li> <li>posix_trace_get_filter()</li> <li>posix_trace_get_status()</li> <li>posix_trace_getnext_event()</li> <li>posix_trace_open()</li> <li>posix_trace_rewind()</li> <li>posix_trace_set_filter()</li> <li>posix_trace_shutdown()</li> <li>posix_trace_timedgetnext_event(</li> <li>posix_typed_mem_open()</li> <li>printf()</li> <li>pthread_rwlock_rdlock()</li> <li>pthread_rwlock_timedrdlock()</li> <li>pthread_rwlock_timedwrlock()</li> <li>pthread_rwlock_wrlock()</li> <li>putc()</li> <li>putc_unlocked()</li> <li>putchar()</li> <li>putchar_unlocked()</li> <li>puts()</li> <li>pututxline()</li> <li>putwc()</li> <li>putwchar()</li> <li>readdir()</li> <li>readdir_r()</li> <li>remove()</li> <li>rename()</li> <li>rewind()</li> <li>rewinddir()</li> <li>scanf()</li> <li>seekdir()</li> <li>semop()</li> <li>setgrent()</li> <li>sethostent()</li> <li>setnetent()</li> <li>setprotoent()</li> <li>setpwent()</li> <li>setservent()</li> <li>setutxent()</li> <li>stat()</li> <li>strerror()</li> <li>strerror_r()</li> <li>strftime()</li> <li>symlink()</li> <li>sync()</li> <li>syslog()</li> <li>tmpfile()</li> <li>tmpnam()</li> <li>ttyname()</li> <li>ttyname_r()</li> <li>tzset()</li> <li>ungetc()</li> <li>ungetwc()</li> <li>unlink()</li> <li>vfprintf()</li> <li>vfwprintf()</li> <li>vprintf()</li> <li>vwprintf()</li> <li>wcsftime()</li> <li>wordexp()</li> <li>wprintf()</li> <li>wscanf()</li> </ul> </blockquote> <p><br></p> <blockquote> <p>An implementation shall not introduce cancellation points into any other functions specified in this volume of IEEE Std 1003.1-2001.</p> <p>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.</p> <p>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.</p> </blockquote> <p>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.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload