Linux下线程操作

1.创建线程:pthread_t 实质上是unsigned long int 类型。
  extern int pthread_create(pthread_t *__restrict __newthread,
             __const pthread_attr_t *__restrict __attr,
             __void *(*__start_routine)(void *),
             void * __restrict __arg);
  第一个参数用来存储线程ID,参数为指向线程ID的指针;
  第二个参数用来设置线程属性。一般为NULL,这时使用系统默认的属性。
  第三个参数是线程运行的代码起始地址,即在此线程中运行哪些代码。
  第四个参数是运行函数的参数地址。如果需要给自定义的函数传入多个参数,则需要使用一个包含这些参数的结构体地址。
  成功则返回0,失败则返回非0值。

2.退出线程:
  extern void pthread_exit(void * __retval);

3.等待线程:
  extern int pthread_join (pthread_t __th, void ** __thread_return);
  此函数将阻塞调用当前线程的进程,直到此线程退出。成功则返回0;失败则返回非0。
  
4.设置独立线程:
  extern int pthread_detach (pthread_t __th);
  成功则将该线程与当前进程分离,使其成为一个独立的线程,并返回0。资源由系统回收。

5.线程退出前操作:
  void pthread_cleanup_push(void (*routine)(void *), void * arg);
  void pthread_cleanup_pop(int execute);
  push为压入清理函数栈,多次调用pthread_cleanup_push()将在清理函数栈中形成一个函数链,在执行函数链时按照压栈的相反顺序弹出;
  execute表示是否在弹出清理函数的同时执行该函数。0为不执行,非0为执行。
tppsdf

6.取消线程:
  extern int pthread_cancel(pthread_t __cancelthread);
  它将调用线程的取消清理处理程序(pthread_cleanup_push函数);
  成功则返回0;否则返回错误编号;是异步执行的。

7.设置取消类型:
  extern int pthread_setcanceltype(int __type, int *__oldtype);
  
8.设置可取消状态:
  extern int pthread_setcancelstate(int __state, int *__oldstate);

9.线程与私有数据:
  int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *) );
  不论哪个线程调用pthread_key_create(),所创建的key都是所有线程可访问的,但各个线程可根据自己的需要往key中填入不同的值,相当于提供了一个同名而不同值的全局变量。
  
  注销一个TSD采用:
  int pthread_key_delete(pthread_key_t key);

10.读写线程私有数据:
  int pthread_setspecific(pthread_key_t key, const void * pointer)
  void * pthread_getspecific(pthread_key_t key); 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值