gpt4 book ai didi

c - 信号量和 sem_wait() 的问题

转载 作者:行者123 更新时间:2023-12-04 06:56:08 26 4
gpt4 key购买 nike

我有一个由多个 pthread 使用的队列结构。如果队列不为空,线程应该从队列中出队,然后做他们的工作。

我最初将其设置为 while 循环,其中线程使用 mutex_lock 检查队列是否为空。不幸的是,这减慢了我的程序速度。

我试图将信号量实现为队列的“计数”变量,但不幸的是,当我尝试调用 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
}
}

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

提前致谢。

编辑:添加一些澄清代码

最佳答案

CreateQueue上面的例子是完整的,那么它似乎没有设置你的全局q多变的。它将结果分配给局部变量。但它似乎没有返回变量。

关于c - 信号量和 sem_wait() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com