TC官方合作论坛

 找回密码
 立即注册
查看: 841|回复: 7
打印 上一主题 下一主题

[已解决] 内存不能为read的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-11 15:17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我全局变量定义了数组
namespace xxd
var handle=array[],hwnd,ret,i=0


然后开启线程的时候
    arraysp.add(handle,"")
    handle[i]=thread.beginthread("xxd.Upgrade","")
    i=i+1

开了大概3-4个线程,线程都有循环等待的语句的,然后关闭的时候
        var len
        arraysp.size(handle,len)
        for(i=0;i<len;i++)
            thread.closehandle(handle[i])
        endfor
        ret=ts.UnBindWindow()

当结束的时候会提示内存不能为read,请问是什么原因?
回复

使用道具 举报

地板
发表于 2014-4-13 04:23:48 | 只看该作者
当多个线程同时试图更改同一个全局变量的值的时候会发生 这种情况
建议去了解下多线程和临界区的概念 可以看一下关于临界区的教程

      当编写在线程执行时运行的代码时,必须考虑到其他线程可能同时也在执行.在某些特殊情况下,必须避免两个线程同时使用同一个全局对象或者变量

       临界区像一扇门,用于阻止其他线程进入一段代码中. 与其他的同步对象不同,临界区不等于等待函数,只能用于单一进程中的线程.一个临界区在同一时间内只允许一个线程访问受保护的内存或者资源.临界区可以用于同步访问非线程安全的代码
回复 支持 反对

使用道具 举报

沙发
 楼主| 发表于 2014-4-11 15:39:14 | 只看该作者
本帖最后由 tobydu 于 2014-4-11 17:13 编辑

高手,大神帮忙看看为什么。
回复 支持 反对

使用道具 举报

板凳
发表于 2014-4-12 15:20:38 | 只看该作者
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2014-4-14 09:02:53 | 只看该作者
157245227 发表于 2014-4-12 15:20
http://bbs.tyuyan.com/thread-14000-1-1.html你看下这个帖子

非常感谢!
回复 支持 反对

使用道具 举报

6#
发表于 2014-8-13 12:20:24 | 只看该作者
q273814 发表于 2014-4-13 04:23
当多个线程同时试图更改同一个全局变量的值的时候会发生 这种情况
建议去了解下多线程和临界区的概念 可以 ...

当编写在线程执行时运行的代码时,必须考虑到其他线程可能同时也在执行.在某些特殊情况下,必须避免两个线程同时使用同一个全局对象或者变量

大神,请问下,如果2个线程同时去更改同一个全局变量会报内存错。但是如果他们同时访问一个全局变量,但是不改变这个全局变量,是不是不会报错?
回复 支持 反对

使用道具 举报

7#
发表于 2014-8-14 08:06:25 | 只看该作者
画面 发表于 2014-8-13 12:20
当编写在线程执行时运行的代码时,必须考虑到其他线程可能同时也在执行.在某些特殊情况下,必须避免两个线 ...

对的 可以同时读取 不能同时更改 就好像你家人给你起名字 只能取一个 但是可以同时叫你的名字
回复 支持 反对

使用道具 举报

8#
发表于 2014-8-14 11:30:11 | 只看该作者
q273814 发表于 2014-8-14 08:06
对的 可以同时读取 不能同时更改 就好像你家人给你起名字 只能取一个 但是可以同时叫你的名字 ...

非常感谢
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-25 22:49 , Processed in 0.165139 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表