【发布时间】:2018-06-11 10:50:10
【问题描述】:
所以环顾互联网,我找不到关于此的一致且有用的信息。那么问题来了:
为什么说 C 中的局部静态变量是线程不安全的?我的意思是,静态局部变量存储在数据段中,由所有线程共享,但是内部链接不应该阻止线程进入彼此的静态变量吗?
This 论坛帖子似乎暗示线程实际上偶尔会跨入彼此的数据段,但这种行为不会明显违反自 90 年代以来的所有 c 标准吗?如果这种行为是意料之中的,那么数据段(即所有具有静态存储持续时间的变量,包括全局变量)的使用是否早就在后续的 c 标准中被弃用了?
我真的不明白这一点,因为每个人似乎都反对局部静态变量,但人们似乎无法就原因达成一致,研究一些论点表明他们是错误的。
一方面,我认为局部静态变量是在函数调用之间传递信息的一种非常好的方式,它可以真正提高可读性和限制范围(例如,将信息作为参数传递并将其写回每个函数调用)。
据我所知,局部静态变量的使用完全合法。但也许我错过了什么?我真的很想知道是不是这样。
[编辑]:这里的答案很有帮助。感谢大家的洞察力。
【问题讨论】:
-
链接帖子中的一些答案只是废话。这就是为什么你不应该信任 Quora - 改用 Stack Overflow。
-
它们怎么可能不安全?
-
@Lundin 在阅读了您的评论后,我确实打开了大声笑的链接..:)
标签: c multithreading static thread-safety