如何在循环时同时循环时,如何运行三个执行循环



i具有一个程序,可以使用do while条件回路在X-dimension中改变位移x[i]来最大程度地减少系统的能量。我想将其扩展到一个程序,该程序通过改变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 %lfn",eta,energy,norm);
  }while(norm>1e-12);
  for(i=0;i<N;i++)
  {
     printf("The  Equillibrium position of ion %d is: %lfn",i+1,x[i]);
  }
  return 0;
}

使用线程有很多建议,但我不相信您确实需要。

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

您不能仅使用三个嵌套循环(如果您需要检查X/Y/Z值的所有组合),还是一次进行一个嵌套循环?线程编程可能很棘手,因此如果不是真正的问题,它确实可以避免它。

您可以尝试使用多线程。多线程不会使您的 do-while循环可以平均但同时运行。

如果您正在使用Linux,则可以使用pthread库,该库提供用于产卵线程的功能,分配任务调度方法,相关功能等。

一些有用的链接:

  • 线程教程1

  • 线程教程2

  • pthread标头和功能

  • man pthread(在Linux上,如果安装了Pthread库)

最新更新