【问题标题】:will Ptheard kill free dynamic memory allocated in the thread function?Pthard 会杀死线程函数中分配的空闲动态内存吗?
【发布时间】:2011-03-27 11:21:16
【问题描述】:

我有一个线程函数,它使用 malloc() 分配内存。我使用 pthread_kill 杀死了线程,但没有释放动态分配的内存。调用 pthread_kill 后会自动释放它还是会出现泄漏?

【问题讨论】:

    标签: c memory-management memory-leaks pthreads


    【解决方案1】:

    您在一个线程中分配的内存不“属于”该线程。它是从所有其他线程正在使用您的程序的同一个全局堆中分配的。所以你必须释放你分配的所有内存,否则你最终会出现泄漏。

    【讨论】:

      【解决方案2】:

      正如vicatcu所说,会有泄漏。

      我永远不会推荐使用pthread_kill,除非你绝对必须这样做。相反,您应该创建一个信号机制,让线程知道何时应该完成,然后加入线程。并且线程函数应该偶尔轮询那个值,如果它得到一个终止信号,它应该清理自己的资源并退出。

      当然,另一种选择是尽量不在线程中分配内存。但我想你并不总是得到那种奢侈。 :-)

      【讨论】:

        【解决方案3】:

        会有泄漏。 pthreads kill 函数如何知道通过 malloc 分配的变量的名称? C中没有垃圾回收,如果你在某个地方调用malloc,你最好确保你在其他地方调用free。

        [编辑] 也许您应该只设置一个与您的线程关联的全局标志变量,并让您的线程偶尔轮询该变量以了解它是否以及何时应该自行终止。

        【讨论】:

          【解决方案4】:

          ,假设您没有为您使用的信号安装信号处理程序,并且该信号的默认操作是进程终止。

          那是因为pthread_kill 不会杀死线程,它会向线程发送信号。如果该信号的作用是终止进程,那么整个进程将不复存在,随之而来的是进程中任何线程分配的任何动态内存。

          没有办法杀死线程。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-02-03
            • 2012-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-06
            • 2011-07-13
            相关资源
            最近更新 更多