gpt4 book ai didi

c++ - 如何使用互斥体保护 vector ?

转载 作者:可可西里 更新时间:2023-11-01 14:46:01 35 4
gpt4 key购买 nike

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

我想创建一个全局变量,将所有读取锁定到一个 vector ,但我不确定线程​​是否也可以被告知相互排除该变量(即不将 bool 更改为 false 并将其检查为同时为真,使该机制毫无意义)。

我使用的是 Windows 7 (Visual Studio 2010 Pro)。感谢您的所有建议!

最佳答案

最快的解决方案是用 concurrent_vector 替换 std::vector .此类模仿 std::vector 的接口(interface),但对于并发读写是线程安全的。

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

关于c++ - 如何使用互斥体保护 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7021164/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com