多线程处理vector的有关问题
多线程处理vector的问题
一个Timer和N个线程,Timer每隔一定时间遍历一次vector,若有满足条件的元素,则会触发与该元素关联的线程,该线程也会遍历vector并将关联自己的元素删除。
这样会导致N个线程同时遍历vector,若在遍历过程中有某个线程删除元素,便会造成错误。
怎么解决这个问题,stl有提供解决方案么,或者使用线程同步又该怎么做呢,求助!
------解决思路----------------------
虽然不了解你 具体的业务。但线程同步 , 可以使用锁。
------解决思路----------------------
删除添加修改共享数据的时候加锁.
搜 mutex
------解决思路----------------------
只能做线程同步,在删除元素的时候加锁,删除完成的时候解锁。如果加锁的时候就停止遍历。
------解决思路----------------------
加锁也不一定能解决你的需求;先加锁试试
------解决思路----------------------
楼主的需求有点怪!
线程跟节点关联做什么?
按生产者和消费的模式,n个线程就是消费者去vector里面取节点消费,完全可以用timer线程或者专门的线程去检查vector是否有节点,有节点就轮训给n个线程去消费
多个线程去竞争一个资源,加锁也是会很慢的
------解决思路----------------------
------解决思路----------------------
这个只能加锁了吧,不然同时多个线程访问,可能会造成访问越界等问题。
------解决思路----------------------
心跳机制可以直接清理离线客户端在vector中的结构。清理完毕后再关闭这个socket。至于与客户端通信的那个线程,不需要清理这个vector的元素
一个Timer和N个线程,Timer每隔一定时间遍历一次vector,若有满足条件的元素,则会触发与该元素关联的线程,该线程也会遍历vector并将关联自己的元素删除。
这样会导致N个线程同时遍历vector,若在遍历过程中有某个线程删除元素,便会造成错误。
怎么解决这个问题,stl有提供解决方案么,或者使用线程同步又该怎么做呢,求助!
------解决思路----------------------
虽然不了解你 具体的业务。但线程同步 , 可以使用锁。
------解决思路----------------------
删除添加修改共享数据的时候加锁.
搜 mutex
------解决思路----------------------
只能做线程同步,在删除元素的时候加锁,删除完成的时候解锁。如果加锁的时候就停止遍历。
------解决思路----------------------
加锁也不一定能解决你的需求;先加锁试试
------解决思路----------------------
楼主的需求有点怪!
线程跟节点关联做什么?
按生产者和消费的模式,n个线程就是消费者去vector里面取节点消费,完全可以用timer线程或者专门的线程去检查vector是否有节点,有节点就轮训给n个线程去消费
多个线程去竞争一个资源,加锁也是会很慢的
------解决思路----------------------
------解决思路----------------------
这个只能加锁了吧,不然同时多个线程访问,可能会造成访问越界等问题。
------解决思路----------------------
心跳机制可以直接清理离线客户端在vector中的结构。清理完毕后再关闭这个socket。至于与客户端通信的那个线程,不需要清理这个vector的元素