使用 pthread 进行互斥锁初始化时出错

error in mutex initialization with pthread

大家好,我正在尝试启动这个互斥体,但代码不起作用:

typedef struct{
        int somma;
        pthread_mutex_t mutex;  // TODO completare con le variabili per la sincronizzazione tra i thread
}Buffer;


typedef struct {
        int id;
        Buffer* b;
} parametri;

我主要做的是:

parametri * p=malloc(sizeof(parametri));
        init_buffer(p->b);

我调用这个函数:

void init_buffer(Buffer* a){
       pthread_mutex_init(&a->mutex,NULL);      //TODO inizializzazione del buffer

        printf("[SERVER] -INIT...\n");
}

但是代码停止工作并且不打印 [SERVER]INIT 所以我认为这是互斥初始化的问题。

main中的指针p->b未初始化。然后,您将该未初始化的指针传递给 init_buffer 并尝试取消引用它。这样做会触发 undefined behavior.

您可以通过为 b 分配 space 来解决此问题:

parametri *p=malloc(sizeof(parametri));
p->b = malloc(sizeof(Buffer));

或更改结构定义以使用 Buffer 的实例而不是指针:

typedef struct {
        int id;
        Buffer b;
} parametri;