看流星社区

 找回密码
 注册账号
查看: 3711|回复: 3

浅谈易语言多线程

[复制链接]

该用户从未签到

发表于 2016-6-12 11:24:27 | 显示全部楼层 |阅读模式
线程-即一个独立运行的子程序,就叫做线程

多线程是程序员们经常会使用到的,多线程非常高效是不可否认的,我们还可以把一些占用时间长的子程序交给线程执行(后台处理),在特别的地方使用线程去处理还能节省系统资源 等。

多线程是这样实现这里就不说了,下面我们主要讲解     线程句柄  许可证(临界区)  互斥量  信号量控制线程数量   原子操作  及  使用多线程的主要事项


线程句柄: 控制线程暂停或强制结束需要用到,关闭线程句柄并不会影响线程执行,所以个人认为线程句柄若无用咋可关闭。
CloseHandle()关闭一个内核对象


许可证:每个进程中访问临界资源的那段代码称为临界区(许可证也称作临界区)。当某个线程进入临界区内的时候,若其他的某个线程需要访问那段资源,那么就会被排斥,不允许进入,要等到那个已经进入的线程退出临界区后,它才能进入访问,通常用作多线程中访问共享资源时的加锁,避免多线程冲突导致程序崩溃。
EnterCriticalSection() 进入临界区
LeaveCriticalSection() 离开临界区


互斥量:互斥量和许可证很相似,许可证只能在自我进程中互斥,而互斥量则可以跨进程互斥,也有人使用这个做禁止重复运行,但这很容易被破J,因为只要人家关闭了那个互斥量就OK.。
CreateMutex() 创建一个互斥量
OpenMutex() 打开一个互斥量
ReleaseMutex() 释放互斥量
WaitForMultipleObjects() 等待互斥量对象


信号量控制线程数量:这里我用最通俗的话来讲解怎么用信号量控制线程数量,信号量首先我们可以把他当做一个容器,那么我们给他指定的多少个空间(线程数),当我们启动一个线程(给信号量资源数减一),那个空间就让他少一个,我们结束一个线程那个空间就多一个(给信号量资源数加一),当空间全部没有了的话,我们此时是在给信号量资源数减一的代码处,那么它就不会减,因为没有空间了,在这时他就会阻塞在那个代码处,等待到有空间能减一时,就自动通过并减一,如此循环那么线程数始终不会超过我们设定的最大线程数——信号量的这个解释只适用于控制线程数,其实信号量并不完全是这样(详细自己百度)。
CreateSemaphore() 创建一个信号量
OpenSemaphore() 打开一个信号量
ReleaseSemaphore() 释放信号量
WaitForSingleObject() 等待信号量


原子操作:原子操作与普通的整数型操作的区别是  普通的整数型操作,多线程中多个线程同时访问或操作一个共享的整数型资源时,会有可能发生多个线程同时访问一个资源而造成冲突的状况,而原子操作不同,原子操作整数型资源时它会禁止别的线程访问这个资源,等待到操作完毕后则可以让别的线程访问,并且操作时不会被任何其他任务或事件所中断,也有人说这里为什么不使用临界区呢,使用临界区也是可以的,但相对来说,原子操作的速度是比临界区快一些的 等.....  。
InterlockedExchangeAdd()  原子性相加
InterlockedIncrement() 原子性自增(+1)
InterlockedDecrement() 原子性自减(-1)
InterlockedExchange() 原子性交换

易语言多线程的注意事项:
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2016-6-16 08:46:14 | 显示全部楼层

我就是来看看~么么哒~~

该用户从未签到

发表于 2016-6-18 23:32:46 | 显示全部楼层
多谢分享!学习 学习!

该用户从未签到

发表于 2016-7-30 11:26:57 | 显示全部楼层
支线完成 支线完成 支线完成
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 10:00

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表