社区
C语言
帖子详情
为什么多线程下全局变量会被莫名修改
N0TEAR
2011-05-24 08:28:32
一个线程函数A,本来是让它在主线程之外的另一个线程里运行的,但只要这个A一运行,一个很关键的全局变量G就会被莫名修改,而如果让这个A在主线程里单线程运行的话G就不会被修改。在多线程下用watch G调试只能看到G被修改,提示被修改的那一行并没有任何意义,纯粹是主线程当时运行到哪一行它就停在哪一行。
为什么会这样?
...全文
301
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
打赏
举报
回复
那是当然的,多线程在单步调试状态下实际上不是并行的。
一般多线程程序里的可写全局变量都是隐形炸弹,应该想办法避免
全局变量
被异常
修改
问题解决思路
文章探讨了
全局变量
被异常
修改
的原因,包括
多线程
未加锁操作、栈溢出、指针越界和编译器优化。建议通过加锁、使用安全函数、调整栈空间和使用volatile关键字来排查和解决此类问题。
C语言
全局变量
被
莫名
修改
,在中断程序里
修改
全局变量
的童鞋注意啦-C中的volatile作用...
本文深入探讨了C语言中volatile变量的特性和用途,包括其如何防止编译器优化以确保数据的一致性,特别是在
多线程
环境、中断服务程序及硬件交互中的作用。
C语言中
全局变量
,静态变量的危险性
本文探讨了
全局变量
和静态变量在C语言编程中的潜在风险,特别是在
多线程
环境中。通过示例代码展示了如何意外地
修改
这些变量,强调了追踪问题的难度。
全局变量
为什么是前端开发的‘方便陷阱’
本文深入剖析
全局变量
在前端开发中作为‘方便陷阱’的本质,指出其导致状态污染、竞态条件与不可重现Bug的核心机制。重点探讨React Context等现代状态管理方案在替代
全局变量
时的实践要点,涵盖识别高危变量、四步隔离法、渐进式迁移工作流,以及SSR下Context失效、性能卡顿等典型问题的解决方案,强调生命周期绑定、显式依赖与不可变约束等关键技术原则。
c
全局变量
多线程
调用_C/C++陷阱与套路,当年就是折在这些地儿…
本文介绍了C++
全局变量
在
多线程
环境下的陷阱,包括构造顺序不确定性导致的问题,以及如何正确处理依赖关系。文章强调了使用
全局变量
时的注意事项,如避免内存越界、操作符短路导致的逻辑错误,并提醒开发者理解和避免使用std::sort的常见误区。此外,还讨论了性能优化策略,如空间换时间、Copy On Write、延迟计算和预计算。最后,提出了数据结构和容器的最佳实践,如理解std::vector的内部机制和选择合适的数据结构。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章