【发布时间】:2021-01-23 08:28:25
【问题描述】:
假设我们有父线程 Tp,它以相同的顺序启动两个子线程 Tc1 和 Tc2,并等待 Tc2 加入 (Tc2.join())。
Tc2:它通过调用 shell 启动并等待用户输入。 Tc1:它启动并运行一个时间计数器,如果用户在 Tc2 子线程中没有输入,它会在指定时间后停止由 Tc2 启动的 shell。
现在的问题是父线程一直处于等待Tc2加入的状态,进程仍然挂起。
Tc1如何终止Tc2(处于用户输入等待状态)以便父线程Tp可以继续?
浏览了很多,但无法突破。
【问题讨论】:
-
终止线程是迟早会导致进程死锁的可靠方法。你需要重新考虑你的方法。 “调用shell”背后的原因:这是一个外部进程还是从
std::cin读取的循环? -
使用“readline”读取用户输入。
-
@Tony:我的用例是监控会话是否空闲,即在一定时间间隔内没有用户输入,然后在主线程 Tp 中继续关闭会话。
-
啊,这是一个 XY 问题!请参阅how to make readline timeout,以及我的其他评论中的
select建议。下次,请提前给我们更多背景信息,以便我们更好地帮助您。 -
现在我已经浏览了 readline 文档,您还可以设置
rl_done,或者只是向 Tc2 线程发送SIGINT信号。
标签: c++ linux multithreading