是否有必要释放为Pthreads编写的内存?

时间:2015-02-03 11:42:58

标签: pthreads pthread-join

代码如下:

    pthread_t *threads;
    pthread_attr_t pta;

    threads = (pthread_t *) malloc(sizeof(pthread_t) * NumThreads);
    pthread_attr_init(&pta);
    for(i=0; i<NumThreads; i++) {
        pthread_create(&threads[i], &pta, (void*(*)(void*))Addup, (void*)(i+1));
    } 

    for(i=0; i<NumThreads; i++) {
        ret_count = pthread_join(threads[i], NULL); 
    }

    pthread_attr_destroy(&pta);

    free(threads); // Is this needed?

那么,是否有必要free(threads)pthread_attr_destroy(&pta)是否释放了内存资源?

2 个答案:

答案 0 :(得分:1)

经过一番搜索,我认为需要

pthread_attr_destroy会破坏由pthread_attr_t制作的pthread_attr_init。这就是全部。

如果pthread_attr_destroy确实free记忆,那么这个例子怎么样?

pthread_t thrd;
pthread_attr_t pta;

pthread_attr_init(&pta);
thrd = pthread_create(...);
...
pthread_attr_destroy(&pta); // What memory should he free?

答案 1 :(得分:1)

这很简单:每次调用malloc()都需要一次调用free()来不泄漏内存。

free(threads); // Is this needed?

所以是绝对的,这是必要的!

这与PThread-API完全无关。