`

UNIX环境高级编程 线程

 
阅读更多

 

 

相关函数列表

//对两个线程ID进行比较
//若相等返回非0数值,否则返回0
#include <pthread.h>
int pthread_equal(pthread_t tid1, pthread_t tid2);

//获得线程自身的ID
#include <pthread.h>
pthread_t pthread_self(void);

//创建新线程
//pthread_attr_t用来定制各种不同的线程属性,新线程函数从start_rtn函数的地址开始运行,如果
//要向start_rtn传递参数,需要将这些参数放入结构体中,然后将此将结构体地址作为arg参数传入
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr,
                   void *(*strt_rtn)(void *), void *restrict arg);

//单个线程可以通过3种方式退出
//1.线程可以简单地从启动例程种返回,返回值是线程的退出码
//2.线程可以被同一进程中的其他线程取消
//3.线程调用pthread_exit
#include <pthread.h>
void pthread_exit(void *rval_ptr);

//进程中的其他线程可以通过调用下列函数来访问这个 rval_ptr指针
//如果对线程的返回值不感兴趣,可以把rval_ptr设置为NULL,这样等于等待线程终止,但是不获取
//线程终止状态
#include <pthread.h>
int pthread_join(pthread_t thread, void **rval_ptr);


//线程取消
#include <pthread.h>
int pthread_cancel(pthread_t tid);

//可以安排一些清理函数,类似进程的atexit函数,这样的函数被称为线程清理处理程序(thread 
//cleanup handler),一个线程可以建立多个清理处理程序,其执行顺序和注册顺序相反
#include <pthread.h>
void pthread_cleanup_push(void (*rtn)(void *), void *arg);
void pthread_cleanup_pop(int execute);

//分离线程
#include <pthread.h>
int pthread_detach(pthread_t tid);


//互斥量
//如果不希望被阻塞使用trylock函数,不出现阻塞直接返回0,否则就会失败不能锁住返回EBUSY
//timelock函数指定一个绝对时间(在X到达之前可以阻塞,而不是等待Y秒)
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_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);
int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);


//读写锁
#include <pthread.h>
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock);
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);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_timerdlock(pthread_rwlock_t *restrict rwlock, const struct 
                              timespec *restrict tsptr);
int pthread_rwlock_timewrlock(pthread_rwlock_t *restrict rwlock, const struct
                              timespec *restrict tsptr);


//条件变量
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread-condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex *restrict mutex);
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex,
                           const struct timespec *restrict tsptr);
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);


//自旋锁
#include <pthread.h>
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);


//屏障
#include <pthread.h>
int pthread_barrier_init(pthread_barrier_t *restrict barrier, const pthread_barrierattr_t 
                         *restrict attr, unsigned int count);
int pthread_barrier_destroy(pthred_barrier_t *barrier);
int pthread_barrier_wait(pthread_barrier_t *barrier);

 

注意事项

不要用直接操作pthread_t结构体

这样会导致代码不可移植,初始化结构体后,用相关函数操作

同样,pthread.h中的其他结构体也不要直接操作,初始化好之后用相关函数操作

因为pthread不是linux的标准库,所以GCC编译时,需要加上 -lpthread参数

 

 

进程和线程原语的比较

进程原语 线程原语 描述
fork pthread_create 创建新的控制流
exit pthread_exit 从现有的控制流中退出
waitpid pthread_join 从控制流中得到退出状态
atexit pthread_cancel_push 注册在退出控制流时调用的函数
getpid pthread_self 获取控制流的ID
abort pthread_cancel 请求控制流的非正常退出

 

 

 

 

参考

undefined reference to 'pthread_create'问题解决

分享到:
评论

相关推荐

    Unix环境高级编程——线程控制PPT

    《Unix环境高级编程》第十二章——线程控制PPT

    UNIX环境高级编程中文版

    《UNIX环境高级编程》是2006年由人民邮电出版社出版的图书,作者是(美)理查德·史蒂文斯、(美)拉戈,译者是张亚英、戚正伟。 本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书...

    UNIX环境高级编程(中文第三版)高清完整

    《UNIX环境高级编程(第3版)》在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系...

    UNIX环境高级编程(第2版)书和源码

    主编和翻译了多本操作系统教材和参考书,包括《UNIX操作系统教程》、《UNIX高级编程技术》、《UNIX环境高级编程》和《操作系统:设计与实现》等。 目录 第1章 UNIX基础知识 1 第2章 UNIX标准化及实现 19 第...

    UNIX环境高级编程(第三版)

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用...

    unix环境高级编程第三版

    本书是被誉为UNIX编程"圣经"的Advanced Programming in the UNIX ...主编和翻译了多本操作系统教材和参考书,包括《UNIX操作系统教程》、《UNIX高级编程技术》、《UNIX环境高级编程》和《操作系统:设计与实现》等。

    UNIX环境高级编程

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    unix环境高级编程源码

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    UNIX环境高级编程(高清版)

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    UNIX环境高级编程(中文第三版)

    《UNIX环境高级编程(第3版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化...

    Unix环境高级编程pdf

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    unix环境高级编程第2版

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    UNIX环境高级编程(带目录版本)

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

    Unix环境高级编程pdf附带书签

    《UNIX环境高级编程》被誉为UNIX编程“圣经”。 书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪...

    UNIX环境高级编程(附例程代码)

    书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用...

Global site tag (gtag.js) - Google Analytics