如何解决退出后分离线程是否泄漏内存C ++
我有一个用例,其中我必须从自身内部停止线程。因此,我正在考虑将其分离,然后调用stop方法(它将完成线程的执行)。
那么分离后它会泄漏内存吗?如果是这样,应该如何处理?
解决方法
除非线程实际退出(例如return
),否则无法“停止”已分离的特定线程,因此这取决于您的意思。至少,这对于标准C ++线程是不可能的。
如果您问return
的线程是否会自动清理资源,答案是否定的-不会。任何会清理其析构函数中的资源的RAII对象都将被调用,但是任何明确分配的对象都不会被清理,并且需要代码来手动完成。
如果您想到的是pthread_cancel
之类的东西,则很有可能不会被清理,因为这是C API,并且取消操作不会插入return
执行析构函数清理。我强烈建议您不要做这种事情。
如果实际上通过“停止”线程来表示std::exit
之类的东西,则这取决于您所使用的基础操作系统。析构函数将不会运行,因此将不执行任何特定的清理代码。但是,在大多数现代OS上,程序终止时会清除所有已使用的资源(如开放内存)。但是,有一些系统不这样做(通常是专用/嵌入式RTOS)
防止分离的线程发生任何类型的泄漏的最佳方法是,当您希望完成它时可以向其发出信号,并始终使用RAII对象,以便自动进行清理。
实际上,您可以使用c++20来使用std::stop_token
,但是在此之前的任何事情中,您都可以简单地从std::shared_ptr<std::atomic<bool>>
设计一个同步系统,并在线程中以“取消”的方式进行查询。点”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。