gpt4 book ai didi

c++ - 使用线程本地存储将具有全局变量的单线程遗留代码转换为多线程代码

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:47 25 4
gpt4 key购买 nike

我有一个遗留 C/C++ 代码的代码库,其中包含许多访问全局静态变量的函数,因此不是线程安全的。我正在寻找有关如何转换此代码以使其线程安全的建议。我想到一种方法是将静态变量转换为线程局部变量,或者以其他方式将它们存储在线程局部存储中。这样做的好处是我不必重写大量使用函数将额外上下文传递给它们的代码,只需重写线程不安全函数本身。但是在研究这个过程中,我还没有找到很多关于这是好主意还是坏主意的建议。我有一些具体的问题是

  • 访问基于 TLS 的数据是否会明显变慢?
  • 我是继续陷入使用全局变量的陷阱,因为“全局变量不好”,还是 TLS 抵消了全局变量不好的论点?

任何其他想法也将不胜感激。

最佳答案

首先,最好确定哪些全局变量以可变方式访问,哪些不是。可能有几种情况,一旦设置变量实际上并没有修改,只是这些变量的初始化现在会给非确定性程序带来问题。那些初始化顺序很重要的变量,我会放在它们自己的类中,这些类可以传播到需要它们的每个单独线程。

在那之后,我相信您的问题只会更加复杂。我去过你所在的地方和我的同情。

关于c++ - 使用线程本地存储将具有全局变量的单线程遗留代码转换为多线程代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3701521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com