递归火山软件开发平台

标题: 吴总:多线程有BUG [打印本页]

作者: 伟业    时间: 2020-12-24 20:18
标题: 吴总:多线程有BUG
此例测出两个问题:
一、多个线程同时启动时,有时有一个线程不会被运行(此例第一个线程不会被运行)。
二、如果三个线程同时运行就会出现访问类变量出错现象,三个线程只有第一个线程里是写操作,后面两个是读,(按Windowsr的内存访问机制,这样的读写操作是不会引起内存冲突的,不知是否理解错误请大佬们指教),同样的代码在易语言里是没此问题(附有易语言例子)。
如果运行不会出错说明第一个线程没有运行,注意查看调试输出。
对火山PC不熟,不知是不是自己的问题。

(, 下载次数: 47)

(, 下载次数: 25)

作者: 飞扬工作室    时间: 2020-12-24 20:36
好我检查一下

作者: 飞扬工作室    时间: 2020-12-24 20:43
不是BUG,首先:
1. 调试输出信息是会有溢出的,如果输出信息过多,有可能会被顶出不显示,但是实际上代码还是执行了的.
2. 访问公用成员变量必须加锁,在易语言里面不加锁访问也是不对的.
作者: b0y    时间: 2020-12-24 22:07
- -启动有状态线程 从哪来的  需要下载类库吗
作者: 飞扬工作室    时间: 2020-12-24 22:12
最新版里面就有啊,在置顶帖子里面
作者: 伟业    时间: 2020-12-24 22:46
飞扬工作室 发表于 2020-12-24 20:43
不是BUG,首先:
1. 调试输出信息是会有溢出的,如果输出信息过多,有可能会被顶出不显示,但是实际上代码还是执 ...

说明里的第一个问题很难出现,得重复试,才能出现,第一个问题出现后,第一个线程没有输出,后面两个线程正常输出,但“测试类.数值”一直为“0”,说明第一个线程里的“测试类.数值 = 测试类.数值 + 1”没有被执行,也就是第一个线程没有运行或被挂起。
作者: Ivz    时间: 2021-1-23 23:39
我也遇到了同样的问题,同时启动5个有状态线程(A/B/C/D/E),每个线程里第一行是调试输出该线程名文本(A)。大概率遇到5个线程有的启动了有的未启动以及调试输出的内容混乱。例如输出(A/A/E),正常应该输出(A/B/C/D/E)
作者: qaz2428119    时间: 2021-7-3 13:31
没有搞懂多线程就不要玩,崩溃到让你怀疑人生




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4