精易论坛
标题: 多线程代码保护之 线程锁 [打印本页]
作者: 学易新 时间: 2018-10-27 21:23
标题: 多线程代码保护之 线程锁
易语言的 创建进入许可区()就是传说中的 线程锁了。1. 什么是线程锁机制多线程可以同时运行多个任务
但是当多个线程同时访问共享数据时,可能导致数据不同步,甚至错误!
so,不使用线程锁, 可能导致错误
2. 应用场景I/O密集型操作 需要资源保持同步
3.优缺点优点:保证资源同步
缺点:有等待肯定会慢(许可区内的代码都是以单线程执行的)
3.用法
上面代码是用三个线程去执行thread函数输出结果如下:
下面是加了进入许可区()保护thread函数代码
运行结果如下:
表达能力差 只能这样给代码看了,楼下发帖交流。
-
-
线程锁.e
4.16 KB, 下载次数: 173, 下载积分: 精币 -2 枚
源代码
作者: lisa1824 时间: 2018-10-27 21:39
请问老师,这样会影响效率吗?? 比如 我要瞬间同时执行 10个线程。 加了许可证后 是否会影响效率???
作者: liangzai 时间: 2018-10-27 22:14
速度应该会慢一些
作者: 小崔说事 时间: 2018-10-27 23:02
谢谢分享
作者: beichen521 时间: 2018-10-27 23:17
666666666666666
作者: beichen521 时间: 2018-10-27 23:18
6666666666666666666666666
作者: onefish 时间: 2018-10-27 23:29
#在这里快速回复# 感谢分享,很给力!~
作者: 学易新 时间: 2018-10-27 23:51
许可区内的代码是单线程执行的。IO密集型(数据的读取写入、网络IO数据传输)操作会用到许可证,像我上面用的许可证其实thread函数的所有代码都在许可证里面,虽然是3个线程执行但其实执行到 进入许可区()这里的时候都是单个执行的里面的代码 其它2个线程阻塞在外面,当执行到 退出 许可区()的时候第2个线程才进入,所以相当于是全部都是单线程执行的。许可证是在io密集型操作是保护代码段的(单线程的效率但是很有必要)比如用100个线程从某网站提取数据然后存入到数据库,在线程函数里面提取一条数据存一条数据那么在1秒内会同时向数据库写入100条数据(这个操作就算程序不崩溃你存的数据也会有问题),这种情况下只需要把 存入数据库的代码用许可证保护起来就可以解决了,运行的效果是100条线程提取网站数据,但是数据是一条一条存入数据库的。
作者: a3780586510 时间: 2018-10-28 00:22
人家是特定代码加锁,到你这直接整个线程加锁,你咋这么优秀
作者: 学易新 时间: 2018-10-28 01:02
a3780586510 发表于 2018-10-28 00:22
人家是特定代码加锁,到你这直接整个线程加锁,你咋这么优秀
还是你优秀,示例代码懂?我只介绍线程锁。
作者: sanfeng 时间: 2018-10-28 01:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: a3780586510 时间: 2018-10-28 01:23
了解了解呢,但是也不能这样用嘛
兄die,你这已经不是多线程了呀,整个线程都锁了,还哪来的同步呢,这是单线程了哦,文件读写还是换成mutex吧
作者: 疯狂的八爪鱼 时间: 2018-10-28 15:18
感谢分享,很给力!~
作者: yunying 时间: 2018-10-28 19:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: qq841348510 时间: 2018-10-29 02:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: ljx111 时间: 2018-10-29 09:21
感谢分享~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: flycshuai 时间: 2018-10-29 09:43
表达能力差 只能这样给代码看了,楼下发帖交流。
作者: kyo9766 时间: 2018-10-29 10:59
许可证解释的 你为什么这么优秀.................

作者: ybg813 时间: 2018-10-29 18:42
真的有用吗?哈哈
作者: rongge123 时间: 2018-10-30 10:23
对于我这样的新手希望能用
作者: By未命名 时间: 2018-11-1 20:04
这多线程……我要是想启动100个线程,是不是得写100个线程启动?
作者: 落寞23333 时间: 2018-11-2 19:32
感谢分享~~
作者: qq963720 时间: 2018-11-2 20:08
之前我也以为多线程报错是没加线程锁 后来加上之后处理速度明显下降很多很多 之后经过多次研究 实践 发现多线程不用线程锁其实也是可以的
作者: Driveprotectio 时间: 2018-11-9 22:13
你这样和单线程有什么区别...
作者: minze 时间: 2018-11-9 22:14
好···学习学习···············
作者: 643717896 时间: 2022-11-25 08:58
虽然一个一个执行但是有区别的 并不是
11111
22222
而是
1
2
3
4
欢迎光临 精易论坛 (https://125.confly.eu.org/) |
Powered by Discuz! X3.4 |