码迷,mamicode.com
首页 > 编程语言 > 详细

APUE:线程,线程控制

时间:2017-05-26 14:34:27      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:equal   ack   val   例子   oid   ddr   gets   多次   信号处理   

线程标识

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() 就是一个线程安全不可重入的例子。

 

线程特定数据(线程私有数据)

 

APUE:线程,线程控制

标签:equal   ack   val   例子   oid   ddr   gets   多次   信号处理   

原文地址:http://www.cnblogs.com/mfmans/p/6908098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!