繁体   English   中英

在struct中实现一个信号量,然后用malloc()初始化一个struct,会不会出现futex错误?

[英]Implementing a semaphore in a struct, then use malloc() to initialize a struct, will there be futex errors?

这是我第一次询问堆栈溢出的问题,如果我做错了什么,请随时指出。 非常感谢!

在一个结构体中,有一个 sem_t 类型的变量sem

struct myStruct
{
    sem_t sem;
}myStruct;

在struct的初始化代码中,我是这样写的:

myStruct* init_myStruct()
{
    myStruct* tmp = (myStruct*)malloc(sizeof(myStruct)); 
    sem_init(&tmp->sem, 0, 1);
    return tmp;
}

我的问题是:

  1. init_myStruct()是否正确实现? 这会导致 futex 错误吗? 是否需要将信号量sem声明为静态变量?
  2. 第二个问题来自这里 假设我们在main 中调用init_myStruct() ,那么我们需要在释放结构体之前释放信号量sem 假设指向 myStruct 的指针在 main 中分配给s ,那么简单地执行free(&s->sem)然后我们可以free(s)是否正确? 提前致谢。
  1. 信号量可以位于内存中的任何位置。 它在使用malloc()分配的内存中没有问题,只要您在释放内存之前销毁信号量,如另一个问题的答案中所述。

  2. 您只能释放从malloc()返回的同一指针。 由于您分配了整个结构,因此您也需要释放它。 所以main()应该做free(s) 你不能做free(&s->sem)因为&s->sem不是malloc()返回的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM