如何在一个while循环中同时运行三个while while循环?

时间:2014-02-04 08:01:25

标签: c

我有一个程序可以通过使用x[i]条件循环在x维度中改变位移do while来最小化系统的能量。我想将其扩展到一个程序,通过改变x[i]y[i]z[i]来最小化能量,我想,在这种情况下,需要三个同时do while个循环大do while循环,我该如何实现?

一维问题代码如下所示:

int main(void)
{
  double eta,energyold;
  energyold=1.0;
  unsigned i,j;
  init();

  do{
    function();
    functiond(); //JACOBIAN
    dgesv(fnd,b,N,dx);
    newpsn();
    energyT();
    eta=fabs(energy-energyold)/energy;
    energyold=energy;
    //printf("%lf %lf %lf\n",eta,energy,norm);
  }while(norm>1e-12);

  for(i=0;i<N;i++)
  {
     printf("The  Equillibrium position of ion %d is: %lf\n",i+1,x[i]);
  }
  return 0;
}

2 个答案:

答案 0 :(得分:2)

有许多使用线程的建议,但我不相信你真的需要。

这听起来更像是一个纯粹的计算问题,在多核CPU上使用线程可能会缩短总执行时间,但是为了表达计算不是必需的。

你不能只使用三个嵌套循环(如果你需要检查x / y / z值的所有组合),或者一次只做一个?线程编程可能相当棘手,因此如果某个特定问题不是必需的话,它可能真的“值得”避免。

答案 1 :(得分:1)

您可以尝试使用多线程。多线程不会使do-while循环并行运行,而是同时运行。

如果您正在使用Linux,则可以使用pthread库来提供生成新线程的函数,分配任务调度方法,互斥锁相关函数等。

一些有用的链接: