我有这个“有趣”的问题。我有这个看起来像
的遗留代码int main()
{
while(true) {
doSomething();
}
}
我想在许多线程中复制doSomething(),所以现在main()看起来像
int main() {
runManyThreads(threadEntry)
}
void threadEntry() {
while(true) {
doSomething();
}
}
问题是doSomething()访问许多全局变量和静态变量,我不能改变它的代码。复制这些静态变量是否有技巧,因此每个线程都有自己的集合? (某些线程本地存储,但不影响doSomething()).. 我使用VisualC ++
答案 0 :(得分:4)
长话短说,不,至少不是(我称之为)合理。
在不想更改doSomething()
的情况下,您最好的选择可能是运行现有流程的多个副本,而不是尝试使用多线程。如果每个线程都要使用全局变量的单独副本,那么多线程和多个进程之间的差异在任何情况下都会相当小。
答案 1 :(得分:1)
未经测试,但我认为您可以执行以下操作:
#define threadlocal __declspec(thread)
然后将threadlocal
放在应该是线程本地的所有变量之前。可能不起作用,当函数没有写成多线程时,将函数抛出到线程中通常不是一个好主意。
答案 2 :(得分:0)
你最好的选择是thread local storage。