大家遇到這種情況麼

发布于 2022-07-19 18:18:27 字数 326 浏览 5 评论 4

今天主要就搜索大文件中的目標

我通過pthread_create傳遞給函數參數

參數是個結構體, 其中有個rdlen表示一個長度,

在線程函數中我對這個rdlen不停的減 一值到它<0然後退出循環

問題出來了, 當rdlen是<0的時候居然不跳出循環.

更奇怪的事情-->我在線程函數中加了一local變量count=0用來統計rdlen當
count>rdlen的時候退出循環,結果成功了

有點暈了......
btw,我有10個線程共用一個函數

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

℡寂寞咖啡 2022-07-28 03:25:22

1.arg->rdlen的数据类型,如果为unsigned int的话 arg->rdlen永远大于0
2.一般情况下,arg->rdlen-=BUFSIZE会编译成多条机器指令,多个线程共享该变量会有些问题的.不过这种情况下虽然会得出错误的结果,线程应该会退出的

怎言笑 2022-07-28 03:07:12

我不想對這個函數枷鎖a

因為我要開100個線程,

尬尬 2022-07-28 02:59:18

线程同步问题。

回眸一遍 2022-07-27 23:07:23

下面的是修改後的是成功的,但是以前的也就是注釋掉的卻不可以鬱悶
void *thread_read(struct attr *arg)
{
  char buf[BUFSIZE]={0};
  int count=0;
  if(NULL==arg){
    fprintf(stderr,"Thread read errorn");
    return NULL;
  }
  fseek(arg->fp,arg->pos,SEEK_SET);
/*   while(arg->rdlen>0) */
  while(count<arg->rdlen)
    {
      fread(buf,BUFSIZE,1,arg->fp);
      findstr(buf);
      /*arg->rdlen-=BUFSIZE; */
      count+=BUFSIZE;
      memset(buf,0,BUFSIZE);
    }
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文