gpt4 book ai didi

无法使用信号量的指针访问信号量(我认为我使用的是错误的)

转载 作者:行者123 更新时间:2023-11-30 16:09:54 25 4
gpt4 key购买 nike

我正在使用信号量在 C 中实现线程安全队列。我可以使用互斥锁来做到这一点,这要容易得多。现在我正在尝试使用二进制信号量。但我不知道如何访问函数关键部分中的信号量。这是我的代码:

int queueEnqueue(queue* q, int value){
int* value1;
sem_getvalue(&(q->sem1),value1);
printf("Value of semaphore is: %d\n", *value1);
sem_wait(&(q->sem1));
if(!queueIsFull(q)){
q->rear = (q->rear + 1) % q->capacity;
q->array[q->rear] = value;
q->size = q->size + 1;
return(1);
}
sem_post(&(q->sem1));
return(0);
}

queue* queueCreate(unsigned capacity){ 
queue* q = malloc(sizeof(queue));
q->capacity = capacity;
q->size = 0;
q->front = 0;
q->rear = -1;
q->array = (int *)malloc(sizeof(int)*capacity);
sem_t sem1;
sem_init(&sem1,0,1);
q->sem1=sem1;
return q;
}

我在这一行得到核心转储:sem_getvalue(&(q->sem1),value1);。我可能正在尝试访问未经允许的内存位置。这一行也有问题:

sem_wait(&(q->sem1));

最佳答案

WhozCraig 回答了我的 sem_getvalue 问题。

关于 sem_wait/sem_post(&(q->sem1)); 的另一个问题sem_post 从未到达,因为程序之前返回

关于无法使用信号量的指针访问信号量(我认为我使用的是错误的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992811/

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