使用 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;
大家好,我正在尝试启动这个互斥体,但代码不起作用:
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;