1 个不稳定版本
使用旧的 Rust 2015
0.2.1 | 2018年5月2日 |
---|
#10 在 #看门狗
11KB
68 行
=============
panic_monitor
=============
panic_monitor 帮助您监控线程并处理恐慌。您可能会想使用 libstd 的 JoinHandles 来实现此功能;然而,它们有两个主要限制
- JoinHandle::join() 会阻塞当前线程。如果您想从单个 "看门狗" 线程监控多个线程,则需要类似 try_join() 的功能,并且最好有一个 "epoll for JoinHandles" 来避免忙等待。但是,JoinHandle 并没有实现这些功能。
- 您不能克隆一个 JoinHandle。如果您想当特定线程恐慌时通知多个线程,您不能使用它的 JoinHandle 来实现。
panic_monitor 解决了这两个问题。PanicMonitor::wait() 允许您指定多个线程,并且一旦其中一个线程恐慌,它就会返回。线程通过它们的 ThreadId(可克隆)指定,这意味着多个线程可以监控同一个线程。每次对 PanicMonitor::wait() 的调用都可以指定不同的监控线程集。
当被监控的线程恐慌时,您会得到一个包含线程名称和 ID 的 Thread 结构体。与 JoinHandle::join() 不同,您 不会 得到传递给 panic!() 的值——这是不可能的,因为此值不需要实现 Clone。
许可协议
以下任一协议下许可,由您选择
- Apache 许可证 2.0(请参阅 LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(请参阅 LICENSE-MIT 或 http://opensource.org/licenses/MIT)
除非您明确声明,否则您提交的任何旨在包含在作品中的贡献,根据 Apache-2.0 许可协议定义,应按照上述双重许可,不附加任何额外条款或条件。