我怎样才能保护一个互斥体的载体?

我正在devise一个接受多个不同交互客户端的C ++服务器,并使用向量来分别跟踪所有这些客户端。 不过,我意识到,由于运行了这么多的线程,一个向量可能被两个线程同时读取和写入的可能性很小。 有没有一个快速和安全的方法来添加互斥或东西,以便它将等到所有的读取完成,直到另一个function添加到它? 不这样做可能会搞乱协议,甚至可能导致服务器崩溃。

我有一个想法创build一个全局variables,将所有读取locking向量,但我不知道是否可以告诉线程相互排斥该variables(即不改变布尔为假,并检查它为真同时,这个机制没有意义)。

我正在使用Windows 7(Visual Studio 2010 Pro)。 感谢您的任何和所有的build议!

Solutions Collecting From Web of "我怎样才能保护一个互斥体的载体?"

既然你使用VS2010,你应该使用Concurrency::concurrent_vector 。 但请注意,这个类有一些限制,并不完全是线程安全的。 您可以使用Concurrency::critical_section或Concurrency :: reader_writer_lock 。 当读取次数多于写入次数时,读写器锁定会提供良好的性能。 您也可以使用Windows 本机读写器锁定,但仅支持Windows Vista和更高版本。

最快的解决方法是用concurrent_vector替换std::vector 。 这个类模仿std::vector的接口,但是对于并发的读写是线程安全的。

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