C:pi项目中的多线程问题
在将pi恢复阶段改为多线程前,代码能正常运行。但将恢复图片和写文件的代码改为多线程后,出现bug。前前后后花了3天左右时间才找到问题,出错代码大致如下:
1 void write_data(FILE *fp){ 2 fwrite(data, size, 1, fp); 3 } 4 void *wrtie_data_thread(void *arg){ 5 FILE *fp; 6 fp = fopen(filepath, "wb"); 7 write_data(fp); 8 fclose(fp); 9 }
若将fclose(fp)移入write_data()末尾,则不会出错。
推测原因,write_data()在该情况下可能是不可重入的。最好的方式是将fopen()和fclose()都放入write_data()。

浙公网安备 33010602011771号