[APUE]第十一章 线程

第十一章 线程

线程也有线程ID用pthread_t 表示

每个系统对pthread_t 的定义不同。

int pthread_equal(pthread_t tid1, pthread_ttid2)

获得线程的线程ID

pthread_t pthread_self()

创建线程

int pthread_create(pthread_t *tid, const pthread_atrr_t*attr, void* (*start_rtn)(void*). void* arg);

每个线程都有自己的栈空间和errno变量

 

线程可以有三种方式退出

1          线程只是从启动例程返回,返回值是退出码

2          线程可以被同一个进程的其他线程取消

3          线程调用phread_exit();

 

void pthread_exit(void * reval);
 
int pthread_join(pthread_t thread, void**reval);

调用线程将一直阻塞可知道指定的线程返回。

 

取消线程

线程可以调用pthread_cancel(pthread_t tid);

int pthread_cancel(pthread_t tid);

 

 

线程清理函数

void pthread_cleanup_push(void(*rtn)(void*), void* arg);
void pthread_pop(int execute);

什么时候调用这些清理函数

1          线程调用pthread_exit

2          响应取消请求的时候

3          用非零execute参数调用pthread_cleanup_pop的时候

 

使线程分离,这样就不用调用phread_join去获取线程的状态了,让操作系统来回收线程的资源。

int pthread_detach(pthread_t  tid);

还可以phread_create的时候对传入的属性,设置为分离状态

 

 

线程同步:

互斥量

初始化和destroy

int pthread_mutex_init(pthread_mutex_t*mutex, const pthread+_mutexattr_t *attr)
int pthread_mutex_destroy(phtread_mutex_t*mutex);

加锁和解锁

int pthread_mutex_lock(pthread_mutex_t*mutex);
int pthread_mutex_trylock(pthread_mutex_t*mutex);
int pthread_mutex_unlock(pthread_mutex_t*mutex);

读写锁

初始化和destroy

int pthread_rwlock_init(pthread_rwlock_t*rwlock, const pthread_rwlockattr_t * attr);
int pthread_rwlock_destroy(pthread_rwlock_t*rwlock);

加锁和解锁

int pthread_rwlock_rdlock(pthread_rwlock_t*rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t* rwlock);
intpthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
intpthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

条件变量:

int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t  *cond);
int pthread_cond_wait(pthread_cond_t *cond, phtread_mutex_t *mutex);
int pthread_cond_signal(phtread_cond_t*cond)//发送信号
int pthread_cond_broadcast(pthread_cond_t*cond)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值