我有一个由几个pthreads使用的队列结构。如果线程不是空的话,它们应该从队列中出队,然后再开展业务。
我最初将此设置为while循环,其中线程使用mutex_lock检查队列是否为空。不幸的是,这使我的程序变慢了。
我尝试将信号量实现为队列的“count”变量,但不幸的是,当我尝试调用sem_wait()时,我遇到了段错误。我发现gdb和semaphore.h不能很好地协同工作,所以我真的很茫然。我可能会犯一个新手的错误,所以任何帮助或建议都会受到赞赏。
队列结构:
typedef struct {
int q[QUEUESIZE+1];
int first;
int last;
sem_t count;
} queue;
这是它的初始化:
queue *CreateQueue(void)
{
queue *q;
q = (queue*)malloc(sizeof(queue));
if (q == NULL)
return NULL;
q->first = 0;
q->last = 0;
sem_init(&(q->count),0, 0);
}
我确保打电话给你:
queue *q;
q = CreateQueue();
在创建任何线程之前。
以下是seg fault
的调用void *ThreadWait(void *t) {
while(1) {
sem_wait(&(q->count)); //THIS SEGFAULTS
ThreadFun(); //this is the function the thread would go to to do all the work
}
}
我希望这只是我现在无法看到的一个简单的错误。
提前致谢。
编辑:添加一些澄清代码
答案 0 :(得分:3)
如果上述示例中的CreateQueue
已完成,则似乎没有设置您的全局q
变量。它将结果分配给局部变量。但它似乎没有返回变量。