在易语言官方多线程支持库中提供线程同步的方法是用许可区。
加入许可区之后可以防止多个线程同时访问公用变量是发生冲突。加入许可区的代码同时只能有一个线程访问,避免冲突。
创建许可区:
创建并返回一个进入许可证数值,此许可证值用作进入程序中的指定许可代码区,以避免多线程冲突。成功返回非零整数值,失败返回0。所创建的许可证在不再使用后,必须使用“删除进入许可证”命令将其删除。本命令为初级命令。
删除进入许可证:
删除由“创建进入许可证”命令所创建返回的进入许可证。成功返回真,失败返回假。本命令为初级命令。
参数 | 数据类型 | 说明 |
进入许可证 | “整数型(int) | 本参数应提供由“创建进入许可证”命令所创建并返回的数值。 |
进入许可区: 根据已经创建的许可证进入指定许可代码区,在此线程未退出之前,其它线程如要通过同一个进入许可证进入该许可代码区则必须先等待此线程退出许可代码区,从而保证了指定许可代码区在任何时候都只能有一条线程进入并执行。本命令为初级命令。
参数 | 数据类型 | 说明 |
进入许可证 | 整数型(int) | 本参数应提供由“创建进入许可证”命令所创建并返回的数值。 |
调试输出结果:
* 8
* 9
* 7
* 6
* 5
* 4
* 3
* 2
* 1
在执行一次:
* 8
* 7
* 9
* 6
* 5
* 4
* 3
* 2
* 1
* 0
我们可以明显的发现问题,,虽然最终是把num减到了0,但是结果完全是乱的。
利用许可证解决上面的问题:
输出结果:
* 9
* 8
* 7
* 6
* 5
* 4
* 3
* 2
* 1
* 0
用了许可证之后每次都是这样的稳定结果。
新闻热点
疑难解答