0
C 프로그래밍 관련.malloc'd 구조체에서 세마포어를 선언하고 free() 구조체를 세마포어를 파괴해야합니까?
가정하자 나는이 작업을 수행합니다
struct myStruct
{
pthread_mutex_t myMutex;
sem_t mySemaphore;
};
`
그리고 난 적절한 크기의 malloc와 세마포어 초기화 :
myStruct *create_myStruct()
{
myStruct *temp;
temp = (myStruct *) malloc(sizeof(myStruct));
sema_init(&sema, 0, 0);
pthread_mutex_init(&(temp->myMutex), NULL);
return temp;
}
내가 수동으로 바로 세마포어를 파괴하거나해야합니까를 무료 전화는 할 수 있을까요?
감사합니다. 필자는 세마포어의 내부 구조가 포인터를 포함하고 있다고 생각합니다. – Henry
보통 사소한 구조체에는 destroy 함수를 사용하는 것이 좋습니다. –
@Henry : 내부 구조체에 포인터가 포함되어 있는지 여부는 중요하지 않지만 세마포어는 공개해야하는 인터페이스가있는 리소스라는 점에서 문제가됩니다. OS가 해당 자원을 식별하는 데 사용하는 작은 정수 (파일 설명자와 같은 작은 정수)를 포함 할 수 있습니다. 리소스에 대한 어떤 종류의 참조도 포함하지 않을 수도 있지만 OS는 일부 구조에서 주소를 보유하고 파기 할 때이를 제거합니다. free가 필요한 리소스가 없을 수도 있고,'sem_destroy'는 no-op이지만 뭔가를하는 구현을 허용하기 위해서는 호출해야합니다. –