服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 易语言 - 详解易语言线程同步

详解易语言线程同步

2022-02-27 16:57易语言教程网 易语言

在本篇内容中我们给大家详细分享了关于易语言多线程之线程同步的相关知识点内容,需要的朋友们学习下。

在易语言官方多线程支持库中提供线程同步的方法是用许可区。

加入许可区之后可以防止多个线程同时访问公用变量是发生冲突。加入许可区的代码同时只能有一个线程访问,避免冲突。

创建许可区:

创建并返回一个进入许可证数值,此许可证值用作进入程序中的指定许可代码区,以避免多线程冲突。成功返回非零整数值,失败返回0。所创建的许可证在不再使用后,必须使用“删除进入许可证”命令将其删除。本命令为初级命令。

删除进入许可证:

删除由“创建进入许可证”命令所创建返回的进入许可证。成功返回真,失败返回假。本命令为初级命令。

 

参数 数据类型 说明
进入许可证 “整数型(int) 本参数应提供由“创建进入许可证”命令所创建并返回的数值。

 

进入许可区: 根据已经创建的许可证进入指定许可代码区,在此线程未退出之前,其它线程如要通过同一个进入许可证进入该许可代码区则必须先等待此线程退出许可代码区,从而保证了指定许可代码区在任何时候都只能有一条线程进入并执行。本命令为初级命令。

 

参数 数据类型 说明
进入许可证 整数型(int) 本参数应提供由“创建进入许可证”命令所创建并返回的数值。

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.版本 2
.支持库 EThread
 
.程序集 窗口程序集1
.程序集变量 线程句柄, 整数型, , "10"
.程序集变量 num, 整数型
 
.子程序 __启动窗口_创建完毕
.局部变量 i, 整数型
 
i = 1
num = 10
.判断循环首 (i ≤ 10)
  启动线程 (&子程序1, , 线程句柄 )
  启动线程 (&子程序2, , 线程句柄 [i + 1])
  关闭线程句柄 (线程句柄 )
  关闭线程句柄 (线程句柄 [i + 1])
  i = i + 2
.判断循环尾 ()
 
 
.子程序 子程序1
 
num = num - 1
输出调试文本 (num)
 
.子程序 子程序2
 
num = num - 1
输出调试文本 (num)

调试输出结果:

* 8
* 9
* 7
* 6
* 5
* 4
* 3
* 2
* 1
在执行一次:
* 8
* 7
* 9
* 6
* 5
* 4
* 3
* 2
* 1
* 0

我们可以明显的发现问题,,虽然最终是把num减到了0,但是结果完全是乱的。

利用许可证解决上面的问题:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.版本 2
.支持库 EThread
 
.程序集 窗口程序集1
.程序集变量 线程句柄, 整数型, , "10"
.程序集变量 num, 整数型
.程序集变量 许可证, 整数型
 
.子程序 __启动窗口_创建完毕
.局部变量 i, 整数型
 
许可证 = 创建进入许可证 ()
 
i = 1
num = 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

用了许可证之后每次都是这样的稳定结果。

详解易语言线程同步

延伸 · 阅读

精彩推荐
  • 易语言易语言获取指定磁盘的名称

    易语言获取指定磁盘的名称

    今天小编就为大家分享一篇关于易语言获取指定磁盘的名称,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    易语言帮助手册12662022-01-04
  • 易语言易语言设置进度条边框样式的方法

    易语言设置进度条边框样式的方法

    今天小编就为大家分享一篇关于易语言设置进度条边框样式的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    易语言帮助手册4422022-01-20
  • 易语言一步一步跟我学易语言之关于变量

    一步一步跟我学易语言之关于变量

    今天小编就为大家分享一篇关于一步一步跟我学易语言之关于变量,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    易语言帮助手册10822021-06-17
  • 易语言易语言在画板中写出指定文本当画板中已满会自动滚屏

    易语言在画板中写出指定文本当画板中已满会自动滚屏

    今天小编就为大家分享一篇关于易语言在画板中写出指定文本当画板中已满会自动滚屏,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,...

    易语言帮助手册9092022-01-12
  • 易语言一步一步跟我学易语言之第二个易程序菜单设计

    一步一步跟我学易语言之第二个易程序菜单设计

    今天小编就为大家分享一篇关于的一步一步跟我学易语言之第二个易程序菜单设计,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要...

    易语言帮助手册7092021-06-17
  • 易语言实例操作易语言载入窗口

    实例操作易语言载入窗口

    在本文中小编给大家整理的是关于易语言载入窗口的教程和步骤内容,需要的可以跟着学习下...

    易语言教程网19162022-03-02
  • 易语言易语言关于程序进程和线程的基础知识

    易语言关于程序进程和线程的基础知识

    今天小编就为大家分享一篇关于易语言关于程序进程和线程的基础知识,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    三叶资源网6662022-02-24
  • 易语言易语言生成exe文件的方法

    易语言生成exe文件的方法

    在本篇内容中小编给大家分享的是关于易语言生成exe文件的方法知识点,需要的朋友们参考下。...

    易语言教程网14792022-03-01