如何使用互斥锁保护矢量?

Sef*_*efu 3 c++ windows multithreading mutex vector

我正在设计一个接受多个不同交互客户端的C++服务器,我使用向量来单独跟踪所有这些客户端.但是,我意识到,由于运行了很多线程,因此两个线程可能同时读取和写入向量的可能性很小.是否有一种快速安全的方法可以向它们添加互斥锁或其他内容,以便它等待所有读取完成,直到另一个函数添加到它?不这样做可能会破坏协议,甚至可能导致服务器崩溃.

我有一个想法,创建一个全局变量,将所有读取锁定到一个向量,但我不确定是否可以告诉线程相互排除该变量(即不将bool更改为false并将其检查为true)同时,渲染机制毫无意义).

我使用的是Windows 7(Visual Studio 2010 Pro).感谢您的任何建议!

Pra*_*ian 5

最快的解决方案是std::vector用a 替换concurrent_vector.此类模仿了std::vector接口,但对于并发读取和写入是线程安全的.

但是,这将使代码不可移植,因为concurrent_vector该类是Microsoft Parallel Patterns Library的一部分,而不是C++标准库.如果要保持可移植性,则必须使用Boost.Mutex(因为VS2010不支持std::mutex)才能从每个线程获得对向量的独占访问权限.使用全局变量来防止并发访问是没用的.