时间:2021-05-19
在易语言官方多线程支持库中提供线程同步的方法是用许可区。
加入许可区之后可以防止多个线程同时访问公用变量是发生冲突。加入许可区的代码同时只能有一个线程访问,避免冲突。
创建许可区:
创建并返回一个进入许可证数值,此许可证值用作进入程序中的指定许可代码区,以避免多线程冲突。成功返回非零整数值,失败返回0。所创建的许可证在不再使用后,必须使用“删除进入许可证”命令将其删除。本命令为初级命令。
删除进入许可证:
删除由“创建进入许可证”命令所创建返回的进入许可证。成功返回真,失败返回假。本命令为初级命令。
参数 数据类型 说明 进入许可证 “整数型(int) 本参数应提供由“创建进入许可证”命令所创建并返回的数值。
进入许可区: 根据已经创建的许可证进入指定许可代码区,在此线程未退出之前,其它线程如要通过同一个进入许可证进入该许可代码区则必须先等待此线程退出许可代码区,从而保证了指定许可代码区在任何时候都只能有一条线程进入并执行。本命令为初级命令。
参数 数据类型 说明 进入许可证 整数型(int) 本参数应提供由“创建进入许可证”命令所创建并返回的数值。
.版本 2.支持库 EThread.程序集 窗口程序集1.程序集变量 线程句柄, 整数型, , "10".程序集变量 num, 整数型.子程序 __启动窗口_创建完毕.局部变量 i, 整数型i = 1num = 10.判断循环首 (i ≤ 10) 启动线程 (&子程序1, , 线程句柄 ) 启动线程 (&子程序2, , 线程句柄 [i + 1]) 关闭线程句柄 (线程句柄 ) 关闭线程句柄 (线程句柄 [i + 1]) i = i + 2.判断循环尾 ().子程序 子程序1num = num - 1输出调试文本 (num).子程序 子程序2num = num - 1输出调试文本 (num)调试输出结果:
* 8
* 9
* 7
* 6
* 5
* 4
* 3
* 2
* 1
在执行一次:
* 8
* 7
* 9
* 6
* 5
* 4
* 3
* 2
* 1
* 0
我们可以明显的发现问题,,虽然最终是把num减到了0,但是结果完全是乱的。
利用许可证解决上面的问题:
.版本 2.支持库 EThread.程序集 窗口程序集1.程序集变量 线程句柄, 整数型, , "10".程序集变量 num, 整数型.程序集变量 许可证, 整数型.子程序 __启动窗口_创建完毕.局部变量 i, 整数型许可证 = 创建进入许可证 ()i = 1num = 10.判断循环首 (i ≤ 10) 启动线程 (&子程序1, , 线程句柄 ) 启动线程 (&子程序2, , 线程句柄 [i + 1]) 关闭线程句柄 (线程句柄 ) 关闭线程句柄 (线程句柄 [i + 1]) i = i + 2.判断循环尾 ().如果真 (num = 0) 删除进入许可证 (许可证).如果真结束.子程序 子程序1进入许可区 (许可证)num = num - 1退出许可区 (许可证)输出调试文本 (num).子程序 子程序2进入许可区 (许可证)num = num - 1退出许可区 (许可证)输出调试文本 (num)输出结果:
* 9
* 8
* 7
* 6
* 5
* 4
* 3
* 2
* 1
* 0
用了许可证之后每次都是这样的稳定结果。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
用易语言写多线程应用要么使用多线程相关的api,支持库或模块,其实那些支持库或模块也都是封装的api,但是要比api使用方便。总体来说易语言官方的多线程支持库要
易语言复制数组实例详解,数组操作,实例讲解,希望能帮到大家。1、易语言新建一个windows窗口点击进入代码编辑区具体看如何用易语言编写自己第一个程序?2、我们
易语言多线程之整数型参数传递易语言启动线程的时候第二个参数是传递给线程的参数,类型是整数型的,当然传递整数型参数会非常的简单,直接传递就可以了。.版本2.支持库
易语言多线程之文本型参数传递易语言启动线程命令的第二个参数是整数型,传递整数型参数方便,可是文本型就不能直接传递了。碰到这种问题,很多新手会使用一些多线程模块来
Java中CountDownLatch进行多线程同步详解CountDownLatch介绍在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法:1