我创建了两个用C代码编写的线程,它在Linux OS上运行。两个线程都在做一些工作,并且它的父进程处于活动状态时它会永远运行。
创建这些线程的过程是以某个时间间隔向systemd
发送监视通知。但是,在发送监视程序通知之前,它希望检查所有线程是否都处于非死锁状态。
在代码中可以使用什么系统调用或者可以使用什么机制来知道线程没有处于死锁状态,以便进程可以检查其创建的线程是否处于死锁状态,并且只发送看门狗如果所有线程都处于非死锁状态,则通知systemd
。
答案 0 :(得分:1)
最简单的方法是让您需要跟踪的每个线程定期更新自己的共享变量。监视包括检查共享变量是否经常改变值。
考虑一个类比。你不经常回家,但你想确保你的两个孩子没有消失。所以每个孩子都有一个罐子。你告诉他们每回家就给罐子加一分钱。现在,每次回家,你都算上每个罐子里的便士。如果任何一个孩子的罐子已经用了相同数量的便士,你知道你有问题。
因此,例如,您可以修改每个执行工作的线程:
要:
然后监控线程必须跟踪上次看到状态变量和当前值的不同值。然后它可以检测死锁线程,如下所示: