信号量和sem_wait()问题

时间:2010-03-29 19:44:17

标签: c pthreads mutex parallel-processing semaphore

我有一个由几个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
  }
}

我希望这只是我现在无法看到的一个简单的错误。

提前致谢。

编辑:添加一些澄清代码

1 个答案:

答案 0 :(得分:3)

如果上述示例中的CreateQueue已完成,则似乎没有设置您的全局q变量。它将结果分配给局部变量。但它似乎没有返回变量。