C ++多线程服务器帮助

时间:2011-01-09 15:46:27

标签: c++ multithreading boost boost-asio

我正在使用boost-asio在c ++中使用多线程服务器。目前我遇到的一个设计问题就是擦除连接。

我有一个服务器实例,它包含一个连接对象的向量。这些连接接收我解析的命令。一个命令特别处理向我的向量中的所有连接发送数据。

现在当连接断开连接时,我正在从向量中删除此连接并调用析构函数。当某人'SendAll'同时有人'断开'时,我似乎会遇到问题。

有人可以推荐更好的设计,还是只指向正确的方向?任何帮助非常感谢。感谢

2 个答案:

答案 0 :(得分:5)

无论什么类维护这个连接向量都需要strand。访问,添加或删除向量时,请使用strand::poststrand::dispatchstrand concept在文档中有详细解释。

  

一条链被严格定义   顺序调用事件   处理程序(即没有并发   调用)。使用股线允许   在多线程中执行代码   程序无需显式   锁定(例如使用互斥锁)。

答案 1 :(得分:1)

围绕矢量锁定不是一个选项吗?每次访问向量都会获得锁定;这将阻止你的竞争条件。只要服务器连接不经常出现,它就不会成为瓶颈。