3
static char const err_msg[] = "Hell has frozen over.";

有一段时间我认为const在线程之间共享像上面那样的变量很好,但后来我突然想到,除非这些变量都在缓存线边界上开始和结束,否则任何相邻的非常量数据都可能导致错误共享,导致任何可能带来的性能损失。

我假设这种担忧是否有效取决于 C 语言和/或编译器如何确定为static( const) 变量分配空间的位置;但尽管如此,为了最大限度地减少错误共享的机会,我想最好将所有static变量声明为thread_local多线程上下文,即使它们是const

thread_local static char const err_msg[] = "Hell has frozen over.";

你能证实这一点吗?

@MichaelDorgan提到有些平台“与访问线程局部变量相关的额外成本以及可以声明的数量限制”。任何证实可能影响我上述假设的参考资料。

@ JonathanLeffler提到const变量往往布置在只读内存区域中,这将消除错误共享问题。那么这方面的一个后续问题是:这是否严格依赖于平台,或者是否有更强有力的保证?

4

0 回答 0