线程的学习(一)

线程的初步重点在线程的创建、分离、退出、同步。
线程分离:分离的线程在线程完成后,系统会自动回收他的储存器资源;不分离的线程,如果不pthread_join或者不结束整个进程,系统不会回收资源。
线程同步:共有互斥量、读写锁、条件变量、自旋锁、屏障共五种方式。
各种同步,只是提供了一种机制,并不是用了以后就会一定实现同步,仍然需要人为的控制使用逻辑才能实现同步。

线程退出:1、线程可以简单的从启动例程中返回,指return,启动例程,即线程的执行函数
2、线程可以被同一进程的其他线程取消
3、线程调用pthread_exit

函数名称

函数功能

说明

pthread_create

创建线程

线程变量:pthread_t

pthread_equal

判断两个线程ID是否相等


pthread_self

获得自身的线程ID


pthread_exit

终止一个线程


pthread_join

等待一个线程

除非指定线程调用pthread_exit、从启动例程返回或者被取消,否则调用线程将一直阻塞

类似于waitpid的功能

pthread_detach 分离一个线程

pthread_cancel

请求取消一个线程

并不等待线程终止,仅提出请求

pthread_cleanup_push

注册一个线程退出函数

必须与pthread_cleanup_pop成对出现

pthread_cleanup_pop

调用注册的线程退出函数

必须与pthread_cleanup_push成对出现

pthread_mutex_init

初始化互斥量

互斥量

变量类型:pthread_mutex_t

pthread_mutex_destory

销毁互斥量,需要在释放内存前调用

pthread_mutex_lock

对互斥量进行加锁,如果已经加锁则阻塞

pthread_mutex_trylock

尝试对互斥量进行加锁,如果已经加锁,则返回EBUSY

pthread_mutex_unlock

对互斥量进行解锁

pthread_mutex_timedlock

带超时的对互斥量的加锁,时间是绝对时间而非相对时间

pthread_rwlock_init

初始化读写锁

读写锁

变量类型:pthread_rwlock_t

pthread_rwlock_destroy

销毁读写锁,需要在释放读写锁占用的内存之前调用

pthread_rwlock_rdlock

以读模式进行加锁

pthread_rwlock_wrlock

以写模式进行加锁

pthread_rwlock_unlock

解锁读写锁

pthread_rwlock_timedrdlock

带超时的以读模式加锁

pthread_rwlock_timedwrlock

带超时的以写模式加锁

pthread_cond_init

初始化条件变量

条件变量

适用于异步等待某个处理结果

变量类型:pthread_cond_t

pthread_cond_destory

对条件变量进行反初始化,需要在释放条件变量底层的内存空间之前调用

pthread_cond_wait

等待条件变量为真

pthread_cond_timedwait

带超时的等待条件变量为真,时间为绝对时间

pthread_cond_signal

通知线程条件已经满足,至少能唤醒一个线程

pthread_cond_broadcast

通知线程条件已经满足,唤醒所有等待该条件的线程

pthread_spin_init

对自旋锁进行初始化

自旋锁

与互斥量类似,但不是通过休眠使进程阻塞,而是在获取之前一直在忙等(自旋)。在等待自旋锁可用之前,CPU不能做其他的事情

变量类型:pthread_spinlock_t

pthread_spin_destory

对自旋锁进行反初始化

pthread_spin_lock

获取自旋锁,获取成功之前一直在自旋

pthread_spin_trylock

获取自旋锁,如果不能成功,立即返回EBUSY

pthread_spin_unlock

解锁自旋锁

pthread_barrier_init

初始化屏障

屏障

当阻塞线程达到设定值,则所有阻塞线程均被唤醒

变量类型:pthread_barrier_t

pthread_barrier_destroy

对屏障进行反初始化

pthread_barrier_wait

线程等待,表明线程已经完成工作,准备等待其他线程赶上来




你可能感兴趣的:(线程,apue,Unix环境高级编程)