多线程处理vector的有关问题

多线程处理vector的问题
一个Timer和N个线程,Timer每隔一定时间遍历一次vector,若有满足条件的元素,则会触发与该元素关联的线程,该线程也会遍历vector并将关联自己的元素删除。
这样会导致N个线程同时遍历vector,若在遍历过程中有某个线程删除元素,便会造成错误。
怎么解决这个问题,stl有提供解决方案么,或者使用线程同步又该怎么做呢,求助!
------解决思路----------------------
虽然不了解你 具体的业务。但线程同步 , 可以使用锁。
------解决思路----------------------
删除添加修改共享数据的时候加锁.
搜 mutex
------解决思路----------------------
只能做线程同步,在删除元素的时候加锁,删除完成的时候解锁。如果加锁的时候就停止遍历。
------解决思路----------------------
加锁也不一定能解决你的需求;先加锁试试
------解决思路----------------------
楼主的需求有点怪!

线程跟节点关联做什么?

按生产者和消费的模式,n个线程就是消费者去vector里面取节点消费,完全可以用timer线程或者专门的线程去检查vector是否有节点,有节点就轮训给n个线程去消费

多个线程去竞争一个资源,加锁也是会很慢的

------解决思路----------------------
多线程处理vector的有关问题
------解决思路----------------------
这个只能加锁了吧,不然同时多个线程访问,可能会造成访问越界等问题。
------解决思路----------------------
引用:
Quote: 引用:

楼主的需求有点怪!

线程跟节点关联做什么?

按生产者和消费的模式,n个线程就是消费者去vector里面取节点消费,完全可以用timer线程或者专门的线程去检查vector是否有节点,有节点就轮训给n个线程去消费

多个线程去竞争一个资源,加锁也是会很慢的

嗯,我的设计本来就是比较低级的,使用阻塞TCP套接字编写,一个服务器程序为每个连接上的客户端建立一个线程用来通信,定义一种结构保存每个客户端的地址和socket标识符,并维护在一个vector中,心跳机制检测到某一客户端离线,便会关闭其相关的socket,对应线程的recv会返回错误,该线程遍历vector清理离线客户端的元素。
我知道做法很傻,初学者,第一次做这个东西,想一点点尝试,以后会改进的。
不知道你说的轮询在我这种情况下该怎么使用呢,谢谢!


心跳机制可以直接清理离线客户端在vector中的结构。清理完毕后再关闭这个socket。至于与客户端通信的那个线程,不需要清理这个vector的元素