Proactor模型的问题:writer_需要加锁么?详见正文
我看了《ACE程序员指南》里面的例程,里面有个服务处理类:class HA_Proactive_Service : public ACE_Service_Handler
{
public:
~HA_Proactive_Service ()
{
if (this->handle () != ACE_INVALID_HANDLE)
ACE_OS::closesocket (this->handle ());
}
virtual void open (ACE_HANDLE h, ACE_Message_Block&);
virtual void handle_read_stream
(const ACE_Asynch_Read_Stream::Result &result);
virtual void handle_write_stream
(const ACE_Asynch_Write_Stream::Result &result);
private:
ACE_Asynch_Read_Stream reader_;
ACE_Asynch_Write_Stream writer_;
};
每个HA_Proactive_Service对象和一个sokcet连接相关联,通过writer_往这个连接的socket写数据。因为我的应用中需要在多个线程中发起向连接的socket写数据的操作,也就是说我会在多个不同的线程中调用“writer_.write(...)”往某个连接的socket中写数据,我的问题是这样的话需要对writer_加锁么?还是ACE的writer_本身就是线程安全的,无需加锁? 对同一handle多线程write,需要加锁。
其实看它是不是线程安全的可以通过看其是否提供了ACE_SYNC这一模板特化选项。
页:
[1]