簡體   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