그러나 pthread_t는 해제해야하는 내부 포인터 을 포함 할 수있는 구조체가 아닙니다.
당신은 pthread_t
구조에 포함 된 (또는 심지어 struct
의 경우) 또는 구현 방법 무엇에 대해 걱정할 필요가 없습니다. 당신 (수) 만 free()
무엇 당신 등
어쩌면이 일부 기능 pthread_destroy에게, calloc()
, malloc()
(가 pthread_t *)를 사용하여 할당?
이러한 기능이 필요하지 않으므로 이러한 기능이 없습니다. 당신이 어떤 목적을 위해 나중에 스레드 ID를 필요로하지 않는
그래서, (는 등, pthread_kill()
를 사용하여 신호를 전송, 가입), 당신이 무엇 괜찮습니다. 그렇지 않으면 코드의 적절한 지점에서 (즉, 스레드 ID가 더 이상 필요하지 않을 때) 무료()를해야합니다.
코드에 어떻게 할당했는지 잘 모르겠습니다. 다음은 스레드 ID를 동적으로 할당하는 간단한 예입니다. 위의 예에서
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* doSomeThing(void* arg)
{
printf("From thread function: Thread ID: %ld\n", (long)pthread_self());
return NULL;
}
int main(int argc, char *argv[])
{
size_t count = 10;
pthread_t *tid;
tid = malloc(count * sizeof *tid);
for(size_t i = 0; i< count; i++) {
int rc = pthread_create(&tid[i], NULL, &doSomeThing, NULL);
if(rc) { /* failure */ }
}
for(size_t i = 0;i<count; i++) {
pthread_join(tid[i], NULL);
}
free(tid);
return 0;
}
, 나는 스레드에 가입
. 결합을 위해 스레드 ID가 필요하기 때문에, tid
이후에 free()가 필요합니다. 또한 tid
에 1pthread_t
의 블록이 할당 되었기 때문에 free()
을 한 번만 호출하는 것을 볼 수 있습니다. 기본적으로, 당신은 malloc()
(또는 calloc()
또는 realloc()
)를 호출 할 때마다 한 번씩 free()
를 호출하고 free()
에 전달하는 포인터가 이전에 *alloc()
기능 중 하나에 의해 반환 된 같은해야합니다.
모든 스레드를'pthread_join()'또는'pthread_detach()'해야한다면'pthread_t *'를'free()'할 수 있습니다. – EOF