找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4280|回复: 5

ACE_Message_Block链表是不是在多线程需要互斥?

[复制链接]
发表于 2008-12-27 22:35:33 | 显示全部楼层 |阅读模式
我用ACE_Stream做网络通信时,需要用到多个ACE_Message_Block组成链表,在Module之间传输,多次用到
mb->duplicate()   
mb->release();

在做压力测试时,大量数据同时到来,有时在mb->release();中出现崩溃,查了一些资料,发现可能是并发时需要加锁,难道ACE_Message_Block没有锁机制吗?请高手释疑。
 楼主| 发表于 2008-12-28 00:20:55 | 显示全部楼层

回复 #1 rainfish 的帖子

问题应该是解决了,我把线程之间传递时把
mb->duplicate()   
mb->release();
去掉了,直接把ACE_Message_Block指针putq到另一个线程,这样子就没问题了。但如果使用mb->duplicate()   传递需要加锁,不知道怎么办。
发表于 2008-12-28 11:13:08 | 显示全部楼层
加锁就用锁处理一下啊。很简单的呀。
{
    ACE_Guard<ACE_Thread_Mutex> lock(m_lock);
    xxxx;
}
记得ACE_Message_Block也可以定制分配器,自己对内存进行一些管理和操作。但是具体细节已经忘记了,你在本站查一下。
 楼主| 发表于 2008-12-28 21:45:12 | 显示全部楼层

回复 #3 winston 的帖子

谢谢老大,这种加锁方式对于普通操作还可以,但是对大量数据发送效率应该不是很高
发表于 2008-12-29 12:38:01 | 显示全部楼层
不一定哦。
很多时候,瓶颈是网络和I/O,不是CPU和内存!
发表于 2008-12-29 17:19:15 | 显示全部楼层
使用putq依然会用到加锁机制,原因是多个线程访问ACE_MessageQueue需要同步
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 21:33 , Processed in 0.017130 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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