c++ - 需要停止线程并从线程例程本身加入
问题描述
我正在研究 C++ 中的状态设计模式,其中我有多个状态。一些州的线程例程由pthread_create
. 现在有些情况下,一种状态会转换到另一种状态,因此需要停止线程并且需要清理内存pthread_join
。
所以总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点?
或者有没有办法在线程例程完成时自动进行内存清理?
PS:问题是,当我从线程例程当前状态析构函数进行状态转换到另一个状态时。在当前状态的析构函数中,我需要停止并加入线程。否则会发生内存泄漏。
解决方案
所以总而言之,我需要从线程例程本身停止线程。我怎样才能做到这一点?
从线程底部正在执行的函数返回。
内存需要清理
您可以在线程终止后通过从另一个线程加入来清理线程。您可以通过在终止线程之前分离线程来避免这样做。
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
推荐阅读
- javascript - 如何等到 ajax 函数在 javascript 中完成
- python - 重新格式化数据框中的多索引列
- javascript - 类js中的方法问题
- python - 我应该为我的网络抓取项目选择哪种项目结构方法?
- jboss - Jboss AS 7.2 - 提供静态内容
- java - Jsoup - 列表的最后一个元素返回 null
- java - 如何使用java从长字符串中删除特定的字符串值?
- reactjs - React Google Login 最大登录尝试次数
- java - Apache POI - PowerPoint 条形图和折线图
- android-softkeyboard - 使用 Jetpack Compose 构建软件键盘 - 在键盘顶部添加额外的 3 个按钮