我在C++中开发了一个状态设计模式,其中我有多个状态。某些状态的线程例程由pthread_create
限定。现在有这样的情况:一个状态转换到另一个状态,因此需要停止线程,并且需要通过pthread_join
清理内存。
因此,总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点呢?
或者有没有一种方法,当线程例程完成时,内存清理会自动发生?
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