社区
C语言
帖子详情
为什么多线程下全局变量会被莫名修改
N0TEAR
2011-05-24 08:28:32
一个线程函数A,本来是让它在主线程之外的另一个线程里运行的,但只要这个A一运行,一个很关键的全局变量G就会被莫名修改,而如果让这个A在主线程里单线程运行的话G就不会被修改。在多线程下用watch G调试只能看到G被修改,提示被修改的那一行并没有任何意义,纯粹是主线程当时运行到哪一行它就停在哪一行。
为什么会这样?
...全文
242
4
打赏
收藏
为什么多线程下全局变量会被莫名修改
一个线程函数A,本来是让它在主线程之外的另一个线程里运行的,但只要这个A一运行,一个很关键的全局变量G就会被莫名修改,而如果让这个A在主线程里单线程运行的话G就不会被修改。在多线程下用watch G调试只能看到G被修改,提示被修改的那一行并没有任何意义,纯粹是主线程当时运行到哪一行它就停在哪一行。 为什么会这样?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
N0TEAR
2011-05-24
打赏
举报
回复
[Quote=引用 2 楼 q191201771 的回复:]
这也是为什么经常说避免使用全局变量
[/Quote]
唉,一直不知道原来还有这个副作用
N0TEAR
2011-05-24
打赏
举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
那是当然的,多线程在单步调试状态下实际上不是并行的。
一般多线程程序里的可写全局变量都是隐形炸弹,应该想办法避免
[/Quote]
明白了,多谢
就想叫yoko
2011-05-24
打赏
举报
回复
这也是为什么经常说避免使用全局变量
jackyjkchen
2011-05-24
打赏
举报
回复
那是当然的,多线程在单步调试状态下实际上不是并行的。
一般多线程程序里的可写全局变量都是隐形炸弹,应该想办法避免
【
全局变量
会
变】的原因&(全局数组内容异常)
3. **
多线程
环境**:在
多线程
程序中,如果没有正确的同步机制,
全局变量
可能被多个线程同时
修改
,导致不可预测的结果。 4. **指针错误**:如果
全局变量
通过指针访问,并且指针未正确初始化或指向了错误的地址,那么...
C++
全局变量
值被
修改
一个
全局变量
的值在执行某个函数是被
莫名
修改
了。为验证
全局变量
的改动情况,写了一部分代码用于测试
全局变量
被异常
修改
问题解决思路
数据/指针越界,这种时候需要查看map文件,查看被
修改
全局变量
的附近是否有频繁
修改
的数据或者指针,尝试将附近的数据增大,查看是否解决问题。栈溢出,通过将栈空间增大或者将原来由栈分配的大数据改为全局数据,...
C语言
全局变量
被
莫名
修改
,在中断程序里
修改
全局变量
的童鞋注意啦-C中的volatile作用...
一个定义为volatile的变量是说这变量可能
会
被意想不到地改变,这样,编译器就不
会
去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的...
编程陷阱_变量被
莫名
修改
编程陷阱_
全局变量
被
莫名
修改
源代码错误点通道号更新导致情况 原工程作用,QT中查询10个通道的数据,定义个数组记录每个通道的时间戳,轮询每个通道 源代码 错误点 CHANNEM_NUM_MAX 定义为 10 通道号更新 目标是...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章