[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)


 

 

你可能感兴趣的:(线程)