为什么多线程下全局变量会被莫名修改

N0TEAR 2011-05-24 08:28:32
一个线程函数A,本来是让它在主线程之外的另一个线程里运行的,但只要这个A一运行,一个很关键的全局变量G就会被莫名修改,而如果让这个A在主线程里单线程运行的话G就不会被修改。在多线程下用watch G调试只能看到G被修改,提示被修改的那一行并没有任何意义,纯粹是主线程当时运行到哪一行它就停在哪一行。

为什么会这样?
...全文
209 4 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
那是当然的,多线程在单步调试状态下实际上不是并行的。

一般多线程程序里的可写全局变量都是隐形炸弹,应该想办法避免

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧