网站首页 > 易语言相关 > 易语言常见问题及笔记 正文
第一课:磨刀不误砍柴工
准备工具:
有道云笔记
易语言5.71
有道词典
易语言助手
或 EVA插件
WINAPI转易 https://www.iisanye.com/?id=970
课程目标:
了解多线程常用API,
了解多线程必备知识概念
多线程安全问题(操作共享资源)
第二课:栈(用数组实现栈)
栈是一种后进先出(LIFO,last in first out)的数据结构。
栈是一种特殊的线性表,是一种只允许在一端进行插入或删除操作的线性表。允许进行插入、删除操作的一端称为栈顶,另一端称为栈底。
栈顶的当前位置是动态的,当栈中没有数据元素时,称为空栈。栈的插入操作称为进栈或入栈,栈的删除操作称为退栈或出栈。
栈分为向上增长(压栈时地址增加,即递增堆栈)和向下增长(压栈时地址减小,即递减堆栈)
判断栈是否满
判断栈是否为空
入栈
出栈
获得栈顶元素
第三课:队列(数组实现队列)
队列(queue)是一种先进先出(FIFO,first in first out)的数据结构。
队列只允许在后端/尾部进行插入操作,在前端/头部进行删除操作。
利用数组按下标进行顺序存储、删除、插入元素的特点,可在数组的末尾插入元素,在数组的首部删除元素。这样可使用数组来实现队列功能。0
判断队列是否满
判断队列是否为空
入列
出列
第四课:多线程的基本概念与线程的实现
进程是资源管理的最小单位,线程是程序执行的最小单位。
每个进程有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程。它包含独立的栈和CPU寄存状态,线程是进程的一条执行路径,每个线程共享其所附属进程的所有资源,包含打开的文件、内存页面。信号标识及动态分配内存等。
因为线程和进程比起来很小,所以相对来说线程花费更少的CPU资源。
在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持多处理器,并且减少进程上下文切换的开销。
线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。一个进程至少需要一个线程作为他的指令执行体,进程管理着资源(比如CPU、内存、文件等等)。而将线程分配到某个CPU上执行。
线程按照其调度者可分为用户级线程和内核级线程两种。
用户级线程:主要解决的是上下文切换的问题,其调度过程由用户决定。(程序开发者)用户级线程要绑定内核级线程运行。
内核级线程:由内核调度机制实现
默认情况下不能保证新线程和调用线程的执行顺序(例程:赛跑)证实了线程执行顺序根据系统调度
每个进程内部的不同线程都有自己的唯一标识(ID)
线程标识只在它所属的进程环境中有效
Sleep(延时)线程告诉系统,自己在一段时间内不要被系统调度。
第五课:线程的调度和线程优先级
线程优先级相同的情况,CPU可以运行一个线程大约20ms。而在系统中的线程有不同的优先级,这将影响调度程序如何选择下一个可调度线程。系统分配CPU时,会先分配给优先级高的线程,那这样岂不是会造成优先级低的线程得不到执行吗?错了,因为大多数线程都是不可调度的。
创建一条挂起的线程
设置线程优先级
获取线程优先级
恢复线程
等待线程
第六课:终止线程和完善多线程常用的API
关闭内核对象 closehandle 如果不关闭句柄的话,可能会造成资源(比如说内核对象)泄露。
挂起线程 127次 挂起3次我们就需要恢复3次
推荐:线程函数返回
ExitThread 该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源
TerminateThread 与ExitThread 不同,ExitThread 总是撤消调用的线程,而Terminate 能够撤消任何线程。如果使用TerminateThread ,那么在拥有线程的进程终止运行之前,系统不撤消该线程的堆栈。Microsoft故意用这种方法来实现TerminateThread 。如果其他仍然正在执行的线程要引用强制撤消的线程堆栈上的值,那么其他的线程就会出现访问违规的问题。
GetExitCodeThread
了解API
switchtothread
SetThreadAffinityMask
PostThreadMessage
第七课:线程安全,线程同步与线程互斥的概念
银行取款操作 账号金额10000块钱 两个人拿着主卡和副卡同一时间去取款机取10000块钱。
第八课:互斥锁
互斥锁是用加锁的方法来控制对共享资源的访问,在同一时刻只能由一条线程拥有互斥锁,拥有互斥锁的线程,才能对共享资源进行访问,其他线程等待,直到拥有互斥锁的线程释放互斥锁为止。
创建互斥锁
加锁
释放锁
打开互斥锁
关闭句柄
第九课:信号量的基本概念和互斥
信号量从本质上来说是一个非负整数的计数器,通常来控制对共享资源的访问。
信号量可以实现线程的同步和互斥。
信号量规则:
如果当前资源计数大于0,那么信号量处于触发状态
如果当前资源计数等于0,那么信号量处于未触发状态
系统绝对不会让当前资源计数变为负数
当前资源计数绝对不会大于最大资源计数
创建信号量
打开一个信号量
释放信号量 此API函数会将lReleaseCount的值加到信号量的当前资源计数上
等待信号量 会让信号量当前资源计数-1
关闭句柄
第十课:许可证
实际情况下,等待许可证的线程,绝对不会等待超时。
创建许可证
进入许可证 会让调用线程进入等待状态 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager CriticalSectionTimeout
尝试进入许可证 不会让调用线程进入等待状态,根据返回值判断
退出许可证
删除许可证
第十一课:读写锁
许可证缺少读并发性
应用于多读少写的的应用程序
SRWLock锁的目的和关键段相同:对一个资源进行保护,不让其他线程访问它。但是,与关键段不同的是:SRWLock锁分为读取者线程和写入者线程。读取者线程在同一时刻可以访问共享资源,这是因为读取资源并不存在破坏资源的风险。只有当写入者线程想要对资源进行更新的时候才需要进行同步。在这种情况下:写入者线程独占对资源的访问权。
写入者线程需要独占对共享资源的访问
读取者线程可同一时刻访问共享资源
初始化读写锁
写锁
释放写锁
读锁
释放读锁
R 成功
R 成功
R 成功
W 失败
W 成功
R 失败
W 成功
W 失败
第十二课:原子锁
所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何的上下文切换。(线程安全)
InterlockedIncrement 以原子操作的形式递增指定变量的值并存储结果。
InterlockedDecrement 以原子操作的形式递减指定变量的值并存储结果。
InterlockedExchange 赋值 返回赋值前的数值
InterlockedExchangeAdd 运算, 返回运算前的数值
InterlockedCompareExchange 返回运算前的数值
LONG __cdecl InterlockedCompareExchange(
__inout LONG volatile* Destination,
__in LONG Exchange,
__in LONG Comparand);
把 Destination,参数的值和 Comparand的值进行对比,如果相等则把第二个参数Exchange值赋值给Destination,否则无操作
第十三课:改造和完善多线程模块并实战
备注:
多线程查询数据,实战了解许可证的用法
第十四课:多线程手动输入验证码
第十五课:(完结篇)
资源下载:
- 上一篇: 易与大漠辅助工具开发中级版
- 下一篇: 微软揭示谷歌Chrome安全漏洞,获15000美元感谢金
猜你喜欢
- 2022-02-26 QQ安卓协议_最新版本8.8.68_wtlogin.login _recv分析
- 2022-02-25 QQ安卓协议_最新版本8.8.68_wtlogin.login _send分析
- 2020-08-13 DIY属于自己的鼠标侧键
- 2020-04-12 win7对硬盘进行bitlocker解锁后再上锁
- 2020-04-12 windows 环境如何启动 redis ?
- 2020-04-12 MySQL之长连接、短连接、连接池
- 2020-04-12 雷电模拟器,fiddler抓不了包,
- 2020-04-12 sql where id大于小于
- 2020-04-12 读取CSV文件内容到列表框
- 2020-04-12 SQL一些知识点
你 发表评论:
欢迎- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag
本文暂时没有评论,来添加一个吧(●'◡'●)