资料介绍
很多人学线程,迷迷糊糊;很多人问线程,有所期待;也有很多人写线程,分享认知给正在努力的年轻人,呦,呦,呦呦。但是,你真的了解线程么?你真的会用多线程么?你真的学明白,问明白,写明白了么?不管你明不明白,反正我不明白,但是,没准,你看完,你就明白了。
前言
就不得不提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多线程技术实现实时的数据采集详细资料说明 35次下载
- 如何使用LabWindows CVI进行多线程技术数据采集系统的构建 26次下载
- C#多线程技术 15次下载
- iOS-多线程网络-多图下载案例 1次下载
- linux多线程编程技术 5次下载
- 紫金桥组态软件新的功能_运行时组态 2次下载
- 多线程在VC++串口通信程序中的应用
- QNX环境下多线程编程
- 基于USB和多线程的实时数据采集系统
- Java的线程课程 0次下载
- 如何保证它们容器运行时的安全? 1.4k次阅读
- Java多线程的用法 1.5k次阅读
- JVM运行时数据区之堆内存 1.5k次阅读
- 什么是多线程 2.7k次阅读
- 什么是Kubernetes容器运行时CRI 3k次阅读
- RTOS多线程必须要MMU才行? 3.2k次阅读
- 利用StopWatch监控Java代码运行时间和分析性能 3.7k次阅读
- 如何缩短Vivado的运行时间 1.5w次阅读
- 如何避免僵尸进程,多线程的实现原理 8.8k次阅读
- 如何用SysTick实现测量程序运行时间 6.8k次阅读
- 多线程面试经典问答 3.2k次阅读
- 多线程服务器编程模型:如何正确使用mutex 和condition variable 7.9k次阅读
- 什么是多线程编程?多线程编程基础知识 1.6w次阅读
- mfc多线程编程实例及代码,mfc多线程间通信介绍 1.8w次阅读
- 多线程好还是单线程好?单线程和多线程的区别 优缺点分析 8.3w次阅读
下载排行
本周
- 1MDD品牌三极管BC807数据手册
- 3.00 MB | 次下载 | 免费
- 2MDD品牌三极管BC817数据手册
- 2.51 MB | 次下载 | 免费
- 3MDD品牌三极管D882数据手册
- 3.49 MB | 次下载 | 免费
- 4MDD品牌三极管MMBT2222A数据手册
- 3.26 MB | 次下载 | 免费
- 5MDD品牌三极管MMBTA56数据手册
- 3.09 MB | 次下载 | 免费
- 6MDD品牌三极管MMBTA92数据手册
- 2.32 MB | 次下载 | 免费
- 7STM32G474 HRTIME PWM 丢波问题分析与解决
- 1.00 MB | 次下载 | 3 积分
- 8新能源电动汽车高压线束的铜铝连接解决方案
- 2.71 MB | 次下载 | 2 积分
本月
- 1爱华AIWA HS-J202维修手册
- 3.34 MB | 37次下载 | 免费
- 2PC5502负载均流控制电路数据手册
- 1.63 MB | 23次下载 | 免费
- 3NB-IoT芯片厂商的资料说明
- 0.31 MB | 22次下载 | 1 积分
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供电电路图资料
- 0.63 MB | 6次下载 | 1 积分
- 5UWB653Pro USB口测距通信定位模块规格书
- 838.47 KB | 5次下载 | 免费
- 6技嘉H110主板IT8628E_BX IO电路图资料
- 2.61 MB | 4次下载 | 1 积分
- 7苏泊尔DCL6907(即CHK-S007)单芯片电磁炉原理图资料
- 0.04 MB | 4次下载 | 1 积分
- 8苏泊尔DCL6909(即CHK-S009)单芯片电磁炉原理图资料
- 0.08 MB | 2次下载 | 1 积分
总榜
- 1matlab软件下载入口
- 未知 | 935137次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233089次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191439次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183353次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81602次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73822次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65991次下载 | 10 积分
电子发烧友App





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