我们如何在不杀死线程的情况下重新初始化线程
How can we re-initialize a thread without killing it?
有没有什么方法可以在不杀死线程的情况下重新初始化线程。我想使用现有的线程,但他们会从头开始。
创建一个管理线程的类。在这个类的run方法中,让它等待,直到一些工作以函数指针或其他实现"工作"接口的类的形式分配给这个类。
一旦分配了工作,线程就可以停止等待并执行工作。一旦工作完成,线程就会坐下来等待,直到有更多的工作分配给它
这允许您保持线程运行并等待工作,而不必在出现新工作时重新创建它。
您所要求的只能通过线程函数的逻辑来实现。线程库/操作系统不知道您的逻辑,也不可能知道您希望它在重新初始化时转到哪里。
还要注意,虽然您可以通过取消和启动线程来实现类似的效果,但线程取消通常是非常危险的(您可能会泄漏资源),即使可能的话(线程必须达到取消点),在大多数情况下都应该避免。因此,您回到了原点:在函数中实现逻辑以检测事件,并使用您想要使用的任何启动定义重新启动。
您可能有两个事件:重新启动和停止。线程函数将在循环中等待它们中的任何一个。如果检测到重新启动,它将执行任务并返回等待事件。如果它检测到停止,它将简单地返回。
相关文章:
- C++ POCO - 如何在不使用 run() 方法的情况下启动线程池上的线程?
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- Vulkan默认情况下已经有多线程了吗
- 我需要线程函数在不停止实际程序的情况下,每2秒打印一次随机数
- 如何在没有同步的情况下使用多个线程(2、4,8、16 个线程)在循环(10,100、1000 个周期)中打印字符串?
- 如何在不复制列表的情况下将列表传递给线程,同时销毁原始列表
- 在不减慢线程速度的情况下保存大量数据
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 如何在<N>不发生内存泄漏的情况下同时(线程安全)填充 c++11 std::map<std::string,std::bitset*>?
- 我可以在没有任何锁的情况下从不同的线程读取内存缓冲区吗?
- 如何改进此代码以便在多线程环境下运行
- 多线程模式下的SQLite3:执行到底不安全
- C/C++分配器在多线程环境下的性能如何
- 如何使用c++在没有读线的情况下显示字符串中的多个单词
- 多线程环境下,其他线程永远无法访问临界区
- Log4cplus api在多线程环境下崩溃
- 多线程环境下的Rocksdb
- 来自回溯的堆栈跟踪未显示导致多线程环境下崩溃的方法
- 多线程环境下的执行时间
- 如何在多线程环境下安全地访问结构字段