我正在使用多个线程处理大量文件。所有这些都通过更新全局变量来更新处理的文件数:
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? 此外,程序退出时没有完全执行,没有错误/警告,任何想法为什么?
答案 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;
}
}