社区
C语言
帖子详情
为什么多线程下全局变量会被莫名修改
N0TEAR
2011-05-24 08:28:32
一个线程函数A,本来是让它在主线程之外的另一个线程里运行的,但只要这个A一运行,一个很关键的全局变量G就会被莫名修改,而如果让这个A在主线程里单线程运行的话G就不会被修改。在多线程下用watch G调试只能看到G被修改,提示被修改的那一行并没有任何意义,纯粹是主线程当时运行到哪一行它就停在哪一行。
为什么会这样?
...全文
209
4
打赏
收藏
为什么多线程下全局变量会被莫名修改
一个线程函数A,本来是让它在主线程之外的另一个线程里运行的,但只要这个A一运行,一个很关键的全局变量G就会被莫名修改,而如果让这个A在主线程里单线程运行的话G就不会被修改。在多线程下用watch G调试只能看到G被修改,提示被修改的那一行并没有任何意义,纯粹是主线程当时运行到哪一行它就停在哪一行。 为什么会这样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
那是当然的,多线程在单步调试状态下实际上不是并行的。
一般多线程程序里的可写全局变量都是隐形炸弹,应该想办法避免
JAVA多
线
程精讲下
多
线
程精讲下课程内容涵盖如下:l
线
程的同步(
线
程安全问题)l
线
程的死锁l
线
程间通信l
线
程组l
线
程池l 多
线
程的第三种实现方案l 匿名内部类方式使用多
线
程l ...
全局
变量
被异常
修改
问题解决思路
数据/指针越界,这种时候需要查看map文件,查看被
修改
全局
变量
的附近是否有频繁
修改
的数据或者指针,尝试将附近的数据增大,查看是否解决问题。栈溢出,通过将栈空间增大或者将原来由栈分配的大数据改为
全局
数据,...
C语言
全局
变量
被
莫名
修改
,在中断程序里
修改
全局
变量
的童鞋注意啦-C中的volatile作用...
一个定义为volatile的
变量
是说这
变量
可能
会
被意想不到地改变,这样,编译器就不
会
去假设这个
变量
的值了。精确地说就是,优化器在用到这个
变量
时必须每次都小心地重新读取这个
变量
的值,而不是使用保存在寄存器里的...
编程陷阱_
变量
被
莫名
修改
编程陷阱_
全局
变量
被
莫名
修改
源代码错误点通道号更新导致情况 原工程作用,QT中查询10个通道的数据,定义个数组记录每个通道的时间戳,轮询每个通道 源代码 错误点 CHANNEM_NUM_MAX 定义为 10 通道号更新 目标是...
C语言中
全局
变量
,静态
变量
的危险性
全局
变量
的危险性在于它的访问权限暴露在整个项目中,可能由于某个函数的异常,导致
全局
变量
有时候
会
莫名
的被
修改
了.这一点在多
线
程编程中尤其需要注意 ,看以下代码运行结果: #include <stdio.h> int ...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章