提问者:小点点

需要停止一个线程并从线程例程本身连接


我在C++中开发了一个状态设计模式,其中我有多个状态。某些状态的线程例程由pthread_create限定。现在有这样的情况:一个状态转换到另一个状态,因此需要停止线程,并且需要通过pthread_join清理内存。

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

或者有没有一种方法,当线程例程完成时,内存清理会自动发生?

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


共1个答案

匿名用户

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

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

内存需要清理

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

附注。最好使用可移植的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