高质量嵌入式Linux C编程学习摘要
来源:互联网 发布:范冰冰演技 知乎 编辑:程序博客网 时间:2024/05/21 06:16
1、多线程方面
1)pthread_create()创建的线程默认情况下是非分离状态的线程,如果修改线程的状态属性,需要使用pthread_attr_getdatachstate()和pthread_attr_setdatachstate()来修改线程的属性。PTHRED_CREATE_DETACHED为分离状态,PTHREAD_CREATE_JOHNABLE是非分离状态。
2)pthread_john()仅适用于非分离状态的目标线程,其作用是等待线程退出,以便释放线程的资源。如果没有必要等待特定线程终止之后进行其他处理,则可以把线程设置为分离状态。
3)pthread_exit()和pthread_john()的几点说明
a、线程自己运行结束,或者调用pthread_exit结束,线程都会释放自己独有的空间资源。
b、如果线程是非分离的,则线程会保留线程的ID号,直到其他线程通过"johning"这个线程确认已经死亡。
c、如果线程是分离的,不需要pthread_exit,线程会自己运行结束,并且释放所有的资源(包括ID号)。
d、子线程最终一定要用pthread_john()或者设置为分离状态结束线程,否则线程的资源不会完全释放。
e、主线程运行pthread_exit()会结束主线程,但是对子线程没有影响。
f、主线程结束则整个程序结束,所以最好在主线程中使用pthread_john()来等待各子线程运行结束,使用john一个线程可以等待多个线程结束。
g、使用john的线程会阻塞,知道john的线程结束,john函数返回,但是它对被john的线程没有影响。
h、如果子线程使用exit()则整个进程结束。
4)线程的同步 ------互斥锁和条件变量
a)两种初始化方式:
静态初始化:pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER
pthread_cond_t cond=PTHREAD_COND_INITIALIZER
动态初始化:
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL);
b)联合使用实现线程的严格同步
//线程1代码
pthread_mutex_lock(&mutex);
if(条件成立)
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
//线程2代码
pthread_mutex_lock(&mutex);
while(条件成立)
pthread_cond_wait(&cond,&mutex);
pthread_mutex_lock(&mutex);
其中,pthread_cond_wait()可以看做解锁线程锁,等待条件为ture,加锁线程锁等几个动作的合体。
5)多线程
每个线程独有的:一个指向当前被执行指令的指令指针,一个栈,一个寄存器的集合,一个私有的数据区。
共有的:该进程中所包含的地址空间。
- 高质量嵌入式Linux C编程学习摘要
- 高质量嵌入式Linux C编程第一次博客作业
- 高质量 C++/C 编程指南 林锐 摘要 内存管理
- c/c++高质量编程学习
- 高质量嵌入式Linuxc编程
- 嵌入式C高质量编程培训心得笔记
- 高质量C++/C编程指南学习笔记(上)
- c++ 高级学习,高质量C++/C编程指南
- 高质量C++/C编程指南学习笔记(上)
- 《高质量C++/C编程指南(林锐)》学习笔记
- 高质量C++/C编程指南 学习总结
- 高质量C编程指南
- 高质量c/c++编程
- 高质量c c++编程
- 高质量编程C/C++
- 读书笔记---高质量C编程
- 高质量C\C++编程
- 高质量C/C++编程
- STL 复习要点
- 使用位运算 的2个算法
- Android 简单实现app通知栏更新及显示进度
- 匈牙利算法,百度
- 微信小程序之顶部选项卡(swiper)
- 高质量嵌入式Linux C编程学习摘要
- 简析.NET Core 以及与 .NET Framework的关系
- ISAKMP协议秘钥计算
- neural networks deep learning Logistic Regression with a Neural Network mindset参考答案
- Java实现敏感词过滤
- 机器学习中的分类算法
- 1276:温度转化
- HashMap和Hashtable的区别
- C语言复习(一)