线程标识
pthread_t pthread_self (void); int pthread_equal (pthread_t __thread1, pthread_t __thread2);
创建、退出、等待、取消线程
int pthread_create (pthread_t *__restrict __newthread, const pthread_attr_t *__restrict __attr, void *(*__start_routine) (void *), void *__restrict __arg); void pthread_exit (void *__retval); // 等待线程结束 int pthread_join (pthread_t __th, void **__thread_return); // 分离线程 int pthread_detach (pthread_t __th); // 请求线程取消 int pthread_cancel (pthread_t __th);
线程属性
enum { PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED }; int pthread_attr_init (pthread_attr_t *__attr); int pthread_attr_destroy (pthread_attr_t *__attr); // 分离状态 int pthread_attr_getdetachstate (const pthread_attr_t *__attr, int *__detachstate); int pthread_attr_setdetachstate (pthread_attr_t *__attr, int __detachstate); // 自定义栈 int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, void **__restrict __stackaddr, size_t *__restrict __stacksize); int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, size_t __stacksize); // 自定义栈大小 int pthread_attr_getstacksize (const pthread_attr_t *__restrict __attr, size_t *__restrict __stacksize); int pthread_attr_setstacksize (pthread_attr_t *__attr, size_t __stacksize); // 扩展栈大小(警戒区) int pthread_attr_getguardsize (const pthread_attr_t *__attr, size_t *__guardsize); int pthread_attr_setguardsize (pthread_attr_t *__attr, size_t __guardsize);
可重入和线程安全
- 线程安全:多个线程可以同时的、安全的调用同一个函数
- 重入:例如 main() 调用 malloc() 时产生信号,中断原有流程,进入信号处理函数,信号处理函数中再次调用 malloc(),称为重入。从栈帧上说,malloc() 出现了多次。此时调用 malloc() 显然有问题,比如可能会破坏原有分配链表,可能会导致程序崩溃,所以 malloc() 是不可重入的。
- 可重入函数肯定是线程安全的,但线程安全不一定可重入,malloc() 就是一个线程安全不可重入的例子。
线程特定数据(线程私有数据)
时间: 2024-10-20 18:48:25