首页 > 解决方案 > 需要停止线程并从线程例程本身加入

问题描述

我正在研究 C++ 中的状态设计模式,其中我有多个状态。一些州的线程例程由pthread_create. 现在有些情况下,一种状态会转换到另一种状态,因此需要停止线程并且需要清理内存pthread_join

所以总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点?

或者有没有办法在线程例程完成时自动进行内存清理?

PS:问题是,当我从线程例程当前状态析构函数进行状态转换到另一个状态时。在当前状态的析构函数中,我需要停止并加入线程。否则会发生内存泄漏。

标签: c++multithreadingpthreads

解决方案


所以总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点?

从线程底部正在执行的函数返回。

内存需要清理

您可以在线程终止后通过从另一个线程加入来清理线程。您可以通过在终止线程之前分离线程来避免这样做。


PS 更喜欢使用可移植的std::thread(或std::jthread)而不是系统特定的线程 API。


您可以添加共享代码如何使用 std::thread 从例程本身终止线程吗

例子:

auto thread_fun = [] {
    return; // this terminates the thread
};
std::thread t(thread_fun);
t.join(); // this waits for the thread to end, and cleans it up

推荐阅读