伟业 发表于 2020-12-24 20:18:27

吴总:多线程有BUG

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




飞扬工作室 发表于 2020-12-24 20:36:40

好我检查一下

飞扬工作室 发表于 2020-12-24 20:43:23

不是BUG,首先:
1. 调试输出信息是会有溢出的,如果输出信息过多,有可能会被顶出不显示,但是实际上代码还是执行了的.
2. 访问公用成员变量必须加锁,在易语言里面不加锁访问也是不对的.

b0y 发表于 2020-12-24 22:07:32

- -启动有状态线程 从哪来的需要下载类库吗

飞扬工作室 发表于 2020-12-24 22:12:11

最新版里面就有啊,在置顶帖子里面

伟业 发表于 2020-12-24 22:46:44

飞扬工作室 发表于 2020-12-24 20:43
不是BUG,首先:
1. 调试输出信息是会有溢出的,如果输出信息过多,有可能会被顶出不显示,但是实际上代码还是执 ...

说明里的第一个问题很难出现,得重复试,才能出现,第一个问题出现后,第一个线程没有输出,后面两个线程正常输出,但“测试类.数值”一直为“0”,说明第一个线程里的“测试类.数值 = 测试类.数值 + 1”没有被执行,也就是第一个线程没有运行或被挂起。

Ivz 发表于 2021-1-23 23:39:31

我也遇到了同样的问题,同时启动5个有状态线程(A/B/C/D/E),每个线程里第一行是调试输出该线程名文本(A)。大概率遇到5个线程有的启动了有的未启动以及调试输出的内容混乱。例如输出(A/A/E),正常应该输出(A/B/C/D/E)

qaz2428119 发表于 2021-7-3 13:31:20

没有搞懂多线程就不要玩,崩溃到让你怀疑人生
页: [1]
查看完整版本: 吴总:多线程有BUG