每个ACE_Handler中都有一个指向Proxy的智能指针,注释是这样的:
The Proxy class acts as a proxy for dispatch of completions
to operations issued for the associated handler. It allows the handler
to be deleted while operations are outstanding. The proxy must be used
to get the ACE_Handler pointer for dispatching, and if it's 0, the
handler is no longer valid and the result should not be dispatched.
ACE_Handler的析构函数会把Proxy中的ACE_Handler指针设会0。
Proactor在分发处理函数时,会先检查Proxy中的ACE_Handler指针,如果为0,则不进行分发。
因为检查的是Proxy,而不是ACE_Hanlder本身,所以上面红色的话是对的。
问题是,这个检查只是在分发的时候进行了一次,如果handle_read_stream已经分发了,并且在调用过程中,
另外一个线程运行handle_write_stream,发现错误,调用delete this,此时handle_read_stream再次运行时,
可能会出现错误吧?
当然这只是可能,我只是不太明白Proxy机制能保证上述问题不会出现吗,希望大家探讨一下。

最新回复
1、按ACE的一般使用规则,不是在handle_write_stream中,发现错误,调用delete this,而是在handle_read_stream发现错误时候,删除自己。
2、Proxy机制,的确保证了不出错误。我们都是这样用的。