【问题标题】:error in mutex initialization with pthread使用 pthread 初始化互斥锁时出错
【发布时间】:2021-06-11 13:34:32
【问题描述】:

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

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 所以我认为这是互斥初始化的问题。

【问题讨论】:

    标签: c pointers struct pthreads mutex


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多