Linux多线程编程
来源:互联网 发布:jquery动态数组 编辑:程序博客网 时间:2024/06/05 09:24
进程与线程区别
- 进程–是资源分配的最小单位。
- 线程–是程序执行的最小单位。
- 进程有独立的地址空间,线程没有独立的地址空间,同一进程里的所有线程共享进程的地址空间。
- 一个进程可以包含若干个线程。
一.创建线程
int pthread_create(pthread_t thread, const pthread_attr_t *attr,void (start_routine) (void ), void *arg);
. thread:用来标识一个线程 . attr:用于设置线程的属性,可以使用NULL来使用默认值 . start_routine:线程函数 . arg:传入线程函数的参数
返回值: 成功返回 0,失败返回非 0
二.线程结束
1. void pthread_exit(void *retval);
. retval:线程结束时的返回值,可由其他函数如pthread_join()来获取
返回值:无
2. int pthread_join(pthread_t thread, void **retval);
. pthread_join函数会阻塞等待指定线程退出,然后回收资源,这样就有同步的功能,使一个线程等待另一个线程退出,然后才继续运行 . retval:用户定义的指针,用来存储被等待线程结束时的返回值(不为NULL时) 线程外面用来等待一个线程运行结束,才回收资源,阻塞
返回值: 成功返回 0,失败返回非 0
3. int pthread_detach(thread_id)(非阻塞,可立即返回)
这个函数的功能是使线程ID为threadid的线程处于分离状态,一旦线程处于分离状态,该线程终止时底层资源立即被回收,否则终止子线程的状态会一直保存(占用系统资源)直到主线程调用pthread_join(threadid,NULL)获取线程的退出状态;通常是主线程使用pthread_create()创建子线程以后,一般可以调用pthread_detach(threadid)分离刚刚创建的子线程,这里的threadid是指子线程的threadid;如此以来,该子线程止时底层资源立即被回收;
被创建的子线程也可以自己分离自己,子线程调用pthread_detach(pthread_self())就是分离自己
返回值: 成功返回 0,失败返回非 0
三.线程间互斥量
1.互斥初始化
静态的初始化锁:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 动态的创建:pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t * attr) attr:PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁 PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP:创建递归互斥锁、 PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP:创建检错互斥锁 返回值: 成功返回 0,失败返回非 0
2.锁定互斥
int pthread_mutex_lock(pthread_mutex_t *mutex);返回值: 成功返回 0,失败返回非 0
3.互斥预锁定
int pthread_mutex_trylock(pthread_mutex_t *mutex); 调用该函数时,若互斥锁未加锁,则上锁,返回 0;若互斥锁已加锁,则函数直接返回失败,即 EBUSY。 返回值: 成功返回 0,失败返回非 0
4.解锁互斥
int pthread_mutex_unlock(pthread_mutex_t * mutex); 返回值: 成功返回 0,失败返回非 0
5.销毁互斥
int pthread_mutex_destroy(pthread_mutex_t *mutex); 返回值: 成功返回 0,失败返回非 0
四.线程间条件量:
1.初始化条件变量 静态分配:pthread_cond_t cv = PTHREAD_COND_INITIALIZER; 动态分配:pthread_cond_init() int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr); 返回值: 成功返回 0,失败返回非 02.阻塞在条件变量上 pthread_cond_wait(); int pthread_cond_wait(pthread_cond_t *cv,pthread_mutex_t *mutex); 函数将解锁mutex参数指向的互斥锁,并使当前线程阻塞在cv参数指向的条件变量上。 被阻塞的线程可以被pthread_cond_signal函数,pthread_cond_broadcast函数唤醒,也可能在被信号中断后被唤醒。 返回值: 成功返回 0,失败返回非 03.用来通知等待条件变量的第一个线程 pthread_cond_signal(); int pthread_cond_signal(pthread_cond_t *_cond); 用来唤醒等待出现与条件变量cond关联条件的第一个线程,唤醒后它会释放掉当前线程占用的信号量的操作 返回值: 成功返回 0,失败返回非 04.阻塞直到指定时间 pthread_cond_timedwait(); int pthread_cond_timedwait(pthread_cond_t *cv,pthread_mutex_t *mp, const structtimespec * abstime); 返回值: 成功返回 0,失败返回非 05.通知等待该条件变量的所有线程 pthread_cond_broadcast(); int pthread_cond_broadcast(pthread_cond_t *_cond); 用来唤醒等待出现与条件变量cond关联条件的所有线程 返回值: 成功返回 0,失败返回非 06.释放条件变量 pthread_cond_destroy();注意:条件变量占用的空间并未被释放。 pthread_cond_ destroy(pthread_cond_t *cond); 返回值: 成功返回 0,失败返回非 0
阅读全文
0 0
- Linux多线程编程
- Linux多线程编程
- pthread/Linux多线程编程
- Linux多线程编程
- Linux 多线程编程入门
- linux下多线程编程
- Linux 多线程编程
- UNIX/LINUX 多线程编程
- Linux 多线程编程笔记
- linux下多线程编程
- Linux多线程编程
- Linux多线程编程
- Linux多线程编程
- Linux多线程编程
- Linux多线程编程基础
- 嵌入式linux多线程编程
- Linux多线程编程
- Linux多线程编程
- Oracle 清理oem下的预警信息
- Linux-定时任务相关
- 解决多条数据点击详情页面中调用jquery赋值重复的问题
- 各种排序算法和应用场景
- 查询超大的Excel的数据更新Oracle数据库中的表
- Linux多线程编程
- tensorboard 显示问题
- El表达式详解
- ...mapActions报错
- 手机横屏小游戏,如何让一个div横屏并铺满屏幕
- android5.1 init对rc文件解析执行顺序
- UILable用法
- 安卓关于Volley获取Set-Cookie和session的持久问题
- python--使用r进行不转义处理