1
2
如果看门狗在另一个线程中运行,那么问题并不严重——看门狗向ConnectionManager发出用异步消息删除的信号,然后退出它自己的线程。 同时,ConnectionManager线程获取删除消息,并开始删除看门狗。 为了避免竞争条件,看门狗析构函数应该加入看门狗线程,并清理线程。(可能还向看门狗线程发出信号,或者断言()有关看门狗线程准备退出的信息)。 |
2
3
消息传递。
而不是让看门狗调用
|
3
2
如果每个对象都在自己的线程中运行,则没有问题。
监视程序通知ConnectionManager并返回。
当ConnectionManager注意到看门狗事件时,它会终止连接线程。 |
4
0
如果你细心的话,没有问题。
这需要仔细的编码和维护,但这似乎不是一个肮脏的黑客。 异步协议需要同样的思考。不仅如此,您还需要避免在ConnectionManager::Queue中的看门狗请求删除与同时处理队列的ConnectionManager之间出现竞争。问题更严重:有一段时间,ConnectionInstance无法正常工作-它已请求删除-但尚未删除。它在做什么?代码不能保持不变。如果有一个安全的方法可以解决不失效的连接实例,那么您也可以自己回滚堆栈,而不创建额外的异步协议。 如果它们在同一线程中,则抛出异常的看门狗可能是处理ConnectionInstance的更简单的方法。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |