当前位置: 技术问答>linux和unix
紧急求教!多线程+段错误!
来源: 互联网 发布时间:2016-09-02
本文导语: 本帖最后由 rayeaster 于 2010-05-11 17:52:46 编辑 程序如下: 子线程A:从一个文件夹中不断读取文件,创建一个工作队列 子线程集合B: 包含若干个线程,试图从上述工作队列中竞争取出工作队列的第一个文件进行...
子线程A:从一个文件夹中不断读取文件,创建一个工作队列
子线程集合B: 包含若干个线程,试图从上述工作队列中竞争取出工作队列的第一个文件进行处理。
问题:
每次集合B中的一个线程取工作队列的第一个文件后试图从工作队列里删掉这个文件,总是会删不掉。而且总会出现段错误。
P.S.,其中mutex定义在主线程的中,是全局变量,这样A和B(不在同一个文件里)都能用这个mutex来锁定工作队;
工作队列我自己写的一个简单容器,类似链表,pop_front()删除并返回第一个元素,push_back()插入末尾
大家帮我看看我的这个程序哪里有问题?或者该怎么设计?
//集合B中的工作线程取文件的函数
void B::reload(){
extern pthread_mutex_t mutex;
pthread_mutex_lock(&mutex);
if(NULL != this->filesource->getDirLoad().first){//getDirLoad()返回的就是工作队列
this->MediatorWorkLoad=this->filesource->getDirLoad().pop_front();
coutcloseSourceDir();//先关闭,等待新的文件进入文件夹
sleep(refreshPeriod);
this->openSourceDir();//重新打开
ptr=readdir(this->sourceDir);
}
}//end while(MediationRunning)
}//end try
catch (exception e){
throw runtime_error("in/out file operations error");
}
pthread_exit(NULL);
}
|
这样比较永远也不会相等 if((tmp1 != filename) && (tmp2 != filename)){
比较字符串应该是这样 if(strcmp(tmp1, filename) && strcmp(tmp2, filename)){
比较字符串应该是这样 if(strcmp(tmp1, filename) && strcmp(tmp2, filename)){