Hello world

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()。

posted @ 2016-05-16 15:44  hershell  阅读(190)  评论(0)    收藏  举报