资料介绍
很多人学线程,迷迷糊糊;很多人问线程,有所期待;也有很多人写线程,分享认知给正在努力的年轻人,呦,呦,呦呦。但是,你真的了解线程么?你真的会用多线程么?你真的学明白,问明白,写明白了么?不管你明不明白,反正我不明白,但是,没准,你看完,你就明白了。
前言
就不得不提CPU,现代的CPU有一个很重要的特性,就是时间片,每一个获得CPU的任务只能运行一个时间片规定的时间。
其实线程对操作系统来说就是一段代码以及运行时数据。操作系统会为每个线程保存相关的数据,当接收到来自CPU的时间片中断事件时,就会按一定规则从这些线程中选择一个,恢复它的运行时数据,这样CPU就可以继续执行这个线程了。
也就是其实就单核CUP而言,并没有办法实现真正意义上的并发执行,只是CPU快速地在多条线程之间调度,CPU调度线程的时间足够快,就造成了多线程并发执行的假象。并且就单核CPU而言多线程可以解决线程阻塞的问题,但是其本身运行效率并没有提高,多CPU的并行运算才真正解决了运行效率问题。
系统中正在运行的每一个应用程序都是一个进程,每个进程系统都会分配给它独立的内存运行。也就是说,在iOS系统中中,每一个应用都是一个进程。
一个进程的所有任务都在线程中进行,因此每个进程至少要有一个线程,也就是主线程。那多线程其实就是一个进程开启多条线程,让所有任务并发执行。
多线程在一定意义上实现了进程内的资源共享,以及效率的提升。同时,在一定程度上相对独立,它是程序执行流的最小单元,是进程中的一个实体,是执行程序最基本的单元,有自己栈和寄存器。
上面这些你是不是都知道,但是我偏要说,哦呵呵。既然我们聊线程,那我们就先从线程开刀。
Pthreads && NSThread
先来看与线程有最直接关系的一套C的API:
Pthreads
POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。
高大上有木有,跨平台有木有,你没用过有木有!下面我们来看一下这个看似牛逼但真的基本用不到的Pthreads是怎么用的:
不如我们来用Pthreads创建一个线程去执行一个任务:
记得引入头文件`#import “pthread.h”`
-(void)pthreadsDoTask{
/*
pthread_t:线程指针
pthread_attr_t:线程属性
pthread_mutex_t:互斥对象
pthread_mutexattr_t:互斥属性对象
pthread_cond_t:条件变量
pthread_condattr_t:条件属性对象
pthread_key_t:线程数据键
pthread_rwlock_t:读写锁
//
pthread_create():创建一个线程
pthread_exit():终止当前线程
pthread_cancel():中断另外一个线程的运行
pthread_join():阻塞当前的线程,直到另外一个线程运行结束
pthread_attr_init():初始化线程的属性
pthread_attr_setdetachstate():设置脱离状态的属性(决定这个线程在终止时是否可以被结合)
pthread_attr_getdetachstate():获取脱离状态的属性
pthread_attr_destroy():删除线程的属性
pthread_kill():向线程发送一个信号
pthread_equal(): 对两个线程的线程标识号进行比较
pthread_detach(): 分离线程
pthread_self(): 查询线程自身线程标识号
//
*创建线程
int pthread_create(pthread_t _Nullable * _Nonnull __restrict, //指向新建线程标识符的指针
const pthread_attr_t * _Nullable __restrict, //设置线程属性。默认值NULL。
void * _Nullable (* _Nonnull)(void * _Nullable), //该线程运行函数的地址
void * _Nullable __restrict); //运行函数所需的参数
*返回值:
*若线程创建成功,则返回0
*若线程创建失败,则返回出错编号
- RT-Thread嵌入式实时操作系统详解
- 简析获取单片机代码运行时间的方法资料下载
- C语言多线程的详细教程资料说明 10次下载
- 使用LabWindows CVI实现多线程技术在数控加工通讯中的应用资料说明 14次下载
- LabWindows CVI中的多线程技术的详细资料说明 29次下载
- 如何使用LabWindows CVI多线程技术实现实时的数据采集详细资料说明 34次下载
- 如何使用LabWindows CVI进行多线程技术数据采集系统的构建 26次下载
- C#多线程技术 15次下载
- iOS-多线程网络-多图下载案例 1次下载
- linux多线程编程技术 5次下载
- 紫金桥组态软件新的功能_运行时组态 2次下载
- 多线程在VC++串口通信程序中的应用
- QNX环境下多线程编程
- 基于USB和多线程的实时数据采集系统
- Java的线程课程 0次下载
- 如何保证它们容器运行时的安全? 699次阅读
- Java多线程的用法 973次阅读
- JVM运行时数据区之堆内存 710次阅读
- 什么是多线程 1304次阅读
- 什么是Kubernetes容器运行时CRI 1548次阅读
- RTOS多线程必须要MMU才行? 2478次阅读
- 利用StopWatch监控Java代码运行时间和分析性能 2902次阅读
- 如何缩短Vivado的运行时间 1.4w次阅读
- 如何避免僵尸进程,多线程的实现原理 8350次阅读
- 如何用SysTick实现测量程序运行时间 6083次阅读
- 多线程面试经典问答 3026次阅读
- 多线程服务器编程模型:如何正确使用mutex 和condition variable 7300次阅读
- 什么是多线程编程?多线程编程基础知识 1.2w次阅读
- mfc多线程编程实例及代码,mfc多线程间通信介绍 1.7w次阅读
- 多线程好还是单线程好?单线程和多线程的区别 优缺点分析 8.1w次阅读
下载排行
本周
- 148V到5KW无桥LLC双向逆变器的电路原理图免费下载
- 0.26 MB | 154次下载 | 10 积分
- 22KW逆变侧功率管的损耗如何进行计算详细公式免费下载
- 0.40 MB | 32次下载 | 2 积分
- 3高功率密度碳化硅MOSFET软开关三相逆变器损耗分析
- 2.27 MB | 30次下载 | 5 积分
- 4S7-200 可编程序控制器系统手册
- 12.81 MB | 4次下载 | 免费
- 5ATX电源 FSP_ATX-300PAF电路图资料
- 0.18 MB | 1次下载 | 2 积分
- 6IP6541_L 150uA 低功耗,集成多种快充输出协议中文资料
- 1.43 MB | 次下载 | 免费
- 7PC5010 单通道20V_10A低边高速驱动器技术手册
- 1.17 MB | 次下载 | 免费
- 8GSV2201D 带嵌入式MCU的DisplayPort 1.4到HDMI 2.0转换器规格书
- 0.67 MB | 次下载 | 2 积分
本月
- 148V到5KW无桥LLC双向逆变器的电路原理图免费下载
- 0.26 MB | 154次下载 | 10 积分
- 22KW逆变侧功率管的损耗如何进行计算详细公式免费下载
- 0.40 MB | 32次下载 | 2 积分
- 3高功率密度碳化硅MOSFET软开关三相逆变器损耗分析
- 2.27 MB | 30次下载 | 5 积分
- 4STM32F10x参考手册资料
- 13.64 MB | 12次下载 | 1 积分
- 5OAH0428 V1.0英文规格书
- 5.86 MB | 8次下载 | 免费
- 6光伏并网逆变器原理
- 7.31 MB | 6次下载 | 2 积分
- 7NS1081/NS1081S/NS1081Q USB 3.0闪存数据手册
- 0.40 MB | 4次下载 | 2 积分
- 8S7-200 可编程序控制器系统手册
- 12.81 MB | 4次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935132次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233089次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191422次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183352次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81600次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73818次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65990次下载 | 10 积分
电子发烧友App






创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论