资料介绍
很多人学线程,迷迷糊糊;很多人问线程,有所期待;也有很多人写线程,分享认知给正在努力的年轻人,呦,呦,呦呦。但是,你真的了解线程么?你真的会用多线程么?你真的学明白,问明白,写明白了么?不管你明不明白,反正我不明白,但是,没准,你看完,你就明白了。
前言
就不得不提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实现多线程技术在数控加工通讯中的应用资料说明 13次下载
- LabWindows CVI中的多线程技术的详细资料说明 28次下载
- 如何使用LabWindows CVI多线程技术实现实时的数据采集详细资料说明 30次下载
- 如何使用LabWindows CVI进行多线程技术数据采集系统的构建 23次下载
- C#多线程技术 14次下载
- iOS-多线程网络-多图下载案例 1次下载
- linux多线程编程技术 5次下载
- 紫金桥组态软件新的功能_运行时组态 2次下载
- 多线程在VC++串口通信程序中的应用
- QNX环境下多线程编程
- 基于USB和多线程的实时数据采集系统
- Java的线程课程 0次下载
- 如何保证它们容器运行时的安全? 514次阅读
- Java多线程的用法 831次阅读
- JVM运行时数据区之堆内存 574次阅读
- 什么是多线程 1097次阅读
- 什么是Kubernetes容器运行时CRI 1315次阅读
- RTOS多线程必须要MMU才行? 2165次阅读
- 利用StopWatch监控Java代码运行时间和分析性能 2620次阅读
- 如何缩短Vivado的运行时间 1.3w次阅读
- 如何避免僵尸进程,多线程的实现原理 8221次阅读
- 如何用SysTick实现测量程序运行时间 5869次阅读
- 多线程面试经典问答 2953次阅读
- 多线程服务器编程模型:如何正确使用mutex 和condition variable 7111次阅读
- 什么是多线程编程?多线程编程基础知识 1.2w次阅读
- mfc多线程编程实例及代码,mfc多线程间通信介绍 1.7w次阅读
- 多线程好还是单线程好?单线程和多线程的区别 优缺点分析 8w次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 92次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 10次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7蓝牙设备在嵌入式领域的广泛应用
- 0.63 MB | 3次下载 | 免费
- 89天练会电子电路识图
- 5.91 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233045次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多