找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3434|回复: 1

Proactor模型的问题:writer_需要加锁么?详见正文

[复制链接]
发表于 2009-7-11 23:05:02 | 显示全部楼层 |阅读模式
我看了《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_加锁么?还是ACEwriter_本身就是线程安全的,无需加锁?
发表于 2009-7-12 16:56:43 | 显示全部楼层
对同一handle多线程write,需要加锁。
其实看它是不是线程安全的可以通过看其是否提供了ACE_SYNC这一模板特化选项。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 17:15 , Processed in 0.015684 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表