C / C ++:在许多线程中复制main()循环

时间:2010-07-27 18:22:21

标签: windows multithreading visual-c++

我有这个“有趣”的问题。我有这个看起来像

的遗留代码
int main()
{
  while(true) {
    doSomething();
 }
}

我想在许多线程中复制doSomething(),所以现在main()看起来像

int main() {
  runManyThreads(threadEntry)
}

void threadEntry() {
   while(true) {
    doSomething();
  }
}

问题是doSomething()访问许多全局变量和静态变量,我不能改变它的代码。复制这些静态变量是否有技巧,因此每个线程都有自己的集合? (某些线程本地存储,但不影响doSomething()).. 我使用VisualC ++

3 个答案:

答案 0 :(得分:4)

长话短说,不,至少不是(我称之为)合理。

在不想更改doSomething()的情况下,您最好的选择可能是运行现有流程的多个副本,而不是尝试使用多线程。如果每个线程都要使用全局变量的单独副本,那么多线程和多个进程之间的差异在任何情况下都会相当小。

答案 1 :(得分:1)

未经测试,但我认为您可以执行以下操作:

#define threadlocal __declspec(thread)

然后将threadlocal放在应该是线程本地的所有变量之前。可能不起作用,当函数没有写成多线程时,将函数抛出到线程中通常不是一个好主意。

答案 2 :(得分:0)

你最好的选择是thread local storage