threads socket multiple example clients multithreading sockets network-programming posix pthreads

multithreading - socket - Puntos de cancelación POSIX



c socket server example handles multiple clients using threads (3)

¿Alguien puede dirigirme hacia una lista definitiva de puntos de cancelación de POSIX?

¡Estaba a punto de responder una pregunta sobre stackoverflow y me di cuenta de que no sabía lo suficiente sobre mis cosas! En particular, ¿aceptan () y seleccionan () puntos de cancelación? Tengo un libro viejo que dice que no, pero he visto sitios en Internet que dicen que sí. ¡Confuso!

También estoy buscando una lista de puntos de cancelación de Linux si eso es diferente.


Información adicional: desde kernel 2.6, Linux ha utilizado la biblioteca de hilos NPTL que es compatible con POSIX, por lo que los puntos de cancelación deberían ser como los anteriores para las implementaciones recientes de Linux.

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



El estándar POSIX 1003.1-2003 proporciona una lista en la sección Interfaces del sistema, luego Información general, luego Hilos ( enlace directo cortesía de A. Rex). ( Agregado : POSIX 1003.1-2008 ya está disponible en la web (las 3872 páginas en PDF y HTML). Tiene que registrarse (gratis). Llegué desde Open Group Bookstore ).

Puntos de cancelación

Los puntos de cancelación se producirán cuando un hilo esté ejecutando las siguientes funciones:

  • aceptar()
  • aio_suspend ()
  • clock_nanosleep ()
  • cerca()
  • conectar()
  • creat ()
  • fcntl () (Cuando el argumento cmd es F_SETLKW)
  • fdatasync ()
  • fsync ()
  • getmsg ()
  • getpmsg ()
  • lockf ()
  • mq_receive ()
  • mq_send ()
  • mq_timedreceive ()
  • mq_timedsend ()
  • msgrcv ()
  • msgsnd ()
  • msync ()
  • nanosleep ()
  • abierto()
  • pausa()
  • encuesta()
  • pread ()
  • pselect ()
  • pthread_cond_timedwait ()
  • pthread_cond_wait ()
  • pthread_join ()
  • pthread_testcancel ()
  • putmsg ()
  • putpmsg ()
  • pwrite ()
  • leer()
  • readv ()
  • recv ()
  • recvfrom ()
  • recvmsg ()
  • seleccionar()
  • sem_timedwait ()
  • sem_wait ()
  • enviar()
  • sendmsg ()
  • enviar a()
  • sigpause ()
  • sigsuspend ()
  • sigtimedwait ()
  • sigwait ()
  • sigwaitinfo ()
  • dormir()
  • sistema()
  • tcdrain ()
  • tu duerme()
  • Espere()
  • waidid ()
  • waitpid ()
  • escribir()
  • writev ()


También puede ocurrir un punto de cancelación cuando un hilo está ejecutando las siguientes funciones:


  • acceso()
  • 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 () (Para cualquier valor del argumento cmd. [Presumiblemente, excepto F_SETLKW que figura en la lista.]
  • 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 ()
  • obtener la fecha()
  • getgrent ()
  • getgrgid ()
  • getgrgid_r ()
  • getgrnam ()
  • getgrnam_r ()
  • gethostbyaddr ()
  • gethostbyname ()
  • gethostent ()
  • gethostid ()
  • gethostname ()
  • getlogin ()
  • getlogin_r ()
  • getnameinfo ()
  • getnetbyaddr ()
  • getnetbyname ()
  • getnetent ()
  • getopt () (si opterr no es cero)
  • getprotobyname ()
  • getprotobynumber ()
  • getprotoent ()
  • getpwent ()
  • getpwnam ()
  • getpwnam_r ()
  • getpwuid ()
  • getpwuid_r ()
  • obtiene ()
  • getservbyname ()
  • getservbyport ()
  • getservent ()
  • getutxent ()
  • getutxid ()
  • getutxline ()
  • getwc ()
  • getwchar ()
  • getwd ()
  • glob ()
  • iconv_close ()
  • iconv_open ()
  • ioctl ()
  • enlazar()
  • hora local()
  • 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 ()
  • pone()
  • pututxline ()
  • putwc ()
  • putwchar ()
  • readdir ()
  • readdir_r ()
  • retirar()
  • rebautizar()
  • rebobinar()
  • rewinddir ()
  • scanf ()
  • seekdir ()
  • semop ()
  • setgrent ()
  • sethostent ()
  • setnetent ()
  • setprotoent ()
  • setpwent ()
  • setservent ()
  • setutxent ()
  • stat ()
  • strerror ()
  • strerror_r ()
  • strftime ()
  • symlink ()
  • sincronizar ()
  • syslog ()
  • tmpfile ()
  • tmpnam ()
  • ttyname ()
  • ttyname_r ()
  • tzset ()
  • ungetc ()
  • ungetwc ()
  • desconectar()
  • vfprintf ()
  • vfwprintf ()
  • vprintf ()
  • vwprintf ()
  • wcsftime ()
  • wordexp ()
  • wprintf ()
  • wscanf ()


Una implementación no debe introducir puntos de cancelación en ninguna otra función especificada en este volumen de IEEE Std 1003.1-2001.

Los efectos secundarios de actuar sobre una solicitud de cancelación mientras se suspende durante una llamada de una función son los mismos que los efectos secundarios que se pueden ver en un programa de subproceso único cuando una llamada a una función se interrumpe por una señal y la función dada retorna [EINTR]. Todos los efectos secundarios se producen antes de llamar a los controladores de limpieza de cancelación.

Siempre que un hilo tenga cancelabilidad habilitada y se haya realizado una solicitud de cancelación con ese hilo como el objetivo, y el hilo llame a cualquier función que sea un punto de cancelación (como pthread_testcancel () o read ()), la solicitud de cancelación se aplicará antes de que la función regrese. Si un hilo tiene cancelabilidad habilitada y se realiza una solicitud de cancelación con el hilo como un objetivo mientras el hilo se suspende en un punto de cancelación, el hilo se activará y se aplicará la solicitud de cancelación. Sin embargo, si el hilo se suspende en un punto de cancelación y el evento que está esperando ocurre antes de que se actúe la solicitud de cancelación, no se especifica si la solicitud de cancelación se procesa o si la solicitud de cancelación permanece pendiente y el hilo se reanuda normalmente. ejecución.

¡Uf! No puedo hacer que la mesa funcione muy bien, se veía bien en la vista previa y nada como una mesa después. ¡Mira la URL de la información! Hay muchos puntos de cancelación posibles.