无法使用其指针访问信号量(我认为我在使用&错误)

时间:2019-11-22 10:57:53

标签: c multithreading function pointers pthreads

我正在使用信号量在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));

1 个答案:

答案 0 :(得分:0)

WhozCraig回答了我的sem_getvalue问题。

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