大家遇到這種情況麼
今天主要就搜索大文件中的目標
我通過pthread_create傳遞給函數參數
參數是個結構體, 其中有個rdlen表示一個長度,
在線程函數中我對這個rdlen不停的減 一值到它<0然後退出循環
問題出來了, 當rdlen是<0的時候居然不跳出循環.
更奇怪的事情-->我在線程函數中加了一local變量count=0用來統計rdlen當
count>rdlen的時候退出循環,結果成功了
有點暈了......
btw,我有10個線程共用一個函數
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
1.arg->rdlen的数据类型,如果为unsigned int的话 arg->rdlen永远大于0
2.一般情况下,arg->rdlen-=BUFSIZE会编译成多条机器指令,多个线程共享该变量会有些问题的.不过这种情况下虽然会得出错误的结果,线程应该会退出的
我不想對這個函數枷鎖a
因為我要開100個線程,
线程同步问题。
下面的是修改後的是成功的,但是以前的也就是注釋掉的卻不可以鬱悶
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);
}
}