无法计算线程中更新状态的百分比。

时间:2014-11-04 08:25:28

标签: multithreading pthreads

我正在使用多个线程处理大量文件。所有这些都通过更新全局变量来更新处理的文件数:

pthread_mutex_lock(&my_lock);
prec++;
pthread_mutex_unlock(&my_lock); 

还有另一个线程显示已处理文件数的状态:

while(1)
{
  printf("\r%d %.2f percent files Pre-Processed......",prec,(float)(prec/560)*100);
 fflush(stdout);
 if(prec==560)
   {
        e=1;
        break;  
    }      
}

为什么我总是将百分比视为0.00? 此外,程序退出时没有完全执行,没有错误/警告,任何想法为什么?

1 个答案:

答案 0 :(得分:1)

您应该锁定互斥锁以读取全局变量(prec)。

while(1)
{
  int curr_prec;

  pthread_mutex_lock(&my_lock);
  curr_prec = prec;
  pthread_mutex_unlock(&my_lock); 

  printf("\r%d %.2f percent files Pre-Processed......",
    curr_prec, (float)(curr_prec/560)*100);
  fflush(stdout);
  if(prec==560)
  {
    e=1;
    break;
  }
}