我有一个被多个 pthreads 使用的队列结构。如果队列不为空,线程应该从队列中出列,然后执行它们的业务。
我最初将此设置为一个while循环,其中线程使用互斥锁检查队列是否为空。不幸的是,这让我的程序慢了下来。
我尝试将信号量实现为队列的“计数”变量,但不幸的是,当我尝试调用 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();
在创建任何线程之前。
这是段错误的调用
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
}
}
我希望这只是我现在看不到的一个简单错误。
提前致谢。
编辑:添加一些澄清代码